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

本文介绍了一种实现多节点拖放的方法,包括设置多选功能、确定拖放位置及执行拖放操作等步骤,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 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、付费专栏及课程。

余额充值