ultratree的使用(一):节点间的拖动

 对节点的拖动通常需要三个步骤:选择需拖放节点,选择拖放位置和执行操作。

如果需要实现多个节点同时拖放的话,那么就要在构造函数中设置多选功能:

 ultraTree2.Override.SelectionType  =  SelectType.ExtendedAutoDrag;     // 实现多选功能

在这之前需要设置个全局变量:拖放位置的节点。

  private  UltraTreeNode AfterNode;

好了,现在开始执行第一步:在这个步骤中要用到DragDrop事件。

  private   void  ultraTree2_DragDrop( object  sender, DragEventArgs e)
        ...{
            UltraTreeNode BeforeNode 
=   null ;
            SelectedNodesCollection SelectedNodes;

            SelectedNodes 
=  (SelectedNodesCollection)e.Data.GetData( typeof (SelectedNodesCollection));
            SelectedNodes 
=  SelectedNodes.Clone()  as  SelectedNodesCollection;
            SelectedNodes.SortByPosition();

            
// 只允许最小等级的拖动
             if  (SelectedNodes[ 0 ].Level  ==   2 )
            ...{
                
// 拖到父级时
                 if  (AfterNode.Level  ==   1 )
                ...{
                    
for  ( int  i  =   0 ; i  <=  (SelectedNodes.Count  -   1 ); i ++ )
                    ...{
                        BeforeNode 
=  SelectedNodes[i];
                        BeforeNode.Reposition(AfterNode.Nodes);
                    }
                }

                
// 拖到同等级时
                 if  (AfterNode.Level  ==   2 )
                ...{
                    
for  ( int  i  =   0 ; i  <=  (SelectedNodes.Count  -   1 ); i ++ )
                    ...{
                        BeforeNode 
=  SelectedNodes[i];
                        BeforeNode.Reposition(AfterNode, NodePosition.Previous);
                    }

                }
            }
        }

根据拖放的需要可以对LEVEL进行修改。

然后选择拖放位置:


        
private   void  ultraTree2_DragOver( object  sender, DragEventArgs e)
        {
            
// 根据鼠标拖动的位置获取拖放点的节点
            System.Drawing.Point PointInTree;
            PointInTree 
=  ultraTree2.PointToClient( new  Point(e.X, e.Y));

            AfterNode 
=  ultraTree2.GetNodeFromPoint(PointInTree);
            e.Effect 
=  DragDropEffects.Move;
        }

可以了,需拖放的节点和拖放位置都有了,那么就执行操作吧。

   private   void  ultraTree2_SelectionDragStart( object  sender, EventArgs e)
        {
            ultraTree2.DoDragDrop(ultraTree2.SelectedNodes, DragDropEffects.Move);
        }

怎么样?感觉很棒吧。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值