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

原文:http://blog.csdn.net/szm220/archive/2007/07/28/1713246.aspx

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

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

 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);
        }

怎么样?感觉很棒吧。

 ultratree的使用(二):节点间的选择关联 http://blog.csdn.net/szm220/archive/2007/07/28/1713269.aspx

ultratree的使用(三):在树上面添加新节点 http://blog.csdn.net/szm220/archive/2007/07/28/1713305.aspx

ultratree的使用(四):动态加载树 http://blog.csdn.net/szm220/archive/2007/07/28/1713398.aspx

posted @ 2009-04-16 01:00  赖文华.NET  阅读(1359)  评论(0编辑  收藏  举报