C#中,TreeView 拖拽时,获取被拖拽的节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中,TreeView 拖拽时,获取被拖拽的节点相关的知识,希望对你有一定的参考价值。

在ItemDrag事件中
请问如何获取到被拖拽的节点啊?
treeView1.SelectedNode 这个属性 在我先选取一个节点后,直接拖拽另外个节点时,SelectedNode 属性还是是之前选取的节点。

具体点就是,鼠标点击了节点A,然后鼠标点击B不放,直接拖拽B,SelectedNode 属性还是是节点A

参考技术A private Point Position = new Point(0, 0);
private void treeView1_DragDrop(object sender, DragEventArgs e)

try

TreeNode myNode = null;
if (e.Data.GetDataPresent(typeof(TreeNode)))

myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));

else

MessageBox.Show("error");

Position.X = e.X;
Position.Y = e.Y;
Position = treeView1.PointToClient(Position);
TreeNode DropNode = this.treeView1.GetNodeAt(Position);
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)

TreeNode DragNode = myNode;
// 将被拖拽节点从原来位置删除。
myNode.Remove();
// 在目标节点下增加被拖拽节点
DropNode.Nodes.Add(DragNode);

// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if (DropNode == null)

TreeNode DragNode = myNode;
myNode.Remove();
treeView1.Nodes.Add(DragNode);


catch (Exception ex)

MessageBox.Show(ex.Message);



private void treeView1_DragEnter(object sender, DragEventArgs e)

if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))

e.Effect = DragDropEffects.Move;

else

e.Effect = DragDropEffects.None;



private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)

if (e.Button == MouseButtons.Left)

DoDragDrop(e.Item, DragDropEffects.Move);



private void treeView1_DragOver(object sender, DragEventArgs e)

treeView1.ExpandAll();
参考技术B 不放怎么点击节点B 呢?
有个鼠标释放一个事件· 点击获得新的节点位置 然后查询新的节点信息
参考技术C 点击B要放啊,你放了才算点了一下,你不放就不算点击了节点B

unity UGUI怎么让 被拖拽的UI最后渲染

参考技术A transform.SetAsLastSibling();
或者使用transform.SetSiblingIndex(int);手动指定层级

--------------
剩下一个transform.SetAsFirstSibling();是放到最底层,注意这3个方法都是只影响local transform list
参考技术B unity官方ui有相关的例子,这里不让发链接,你自己找找

以上是关于C#中,TreeView 拖拽时,获取被拖拽的节点的主要内容,如果未能解决你的问题,请参考以下文章

Vue El-Tree 拖拽排序方法(通用)

unity UGUI怎么让 被拖拽的UI最后渲染

拖拽操作

draggable()拖拽时限制移动区域

C# TreeView 拖拽节点到另一个容器Panel中简单实现

统一进行数据上下文的SaveChanges操作