WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)

Posted happyqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)相关的知识,希望对你有一定的参考价值。

        private int draptype=1;//1:不同级,   不为1:拖同级
  private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                DoDragDrop(e.Item, DragDropEffects.Move);
            }
        }

        private void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(TreeNode)))
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.None;
        }
     
        private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            //获得拖放中的节点
            TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
            //根据鼠标坐标确定要移动到的目标节点
            Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
            TreeNode targetNode = treeView1.GetNodeAt(pt);
            //如果目标节点为分组则添加到下级节点的未端,如果目标节点为素材文件则添加为同级节点
            TreeNode NewMoveNode = (TreeNode)moveNode.Clone();
            if (draptype == 1)
            {
                targetNode.Nodes.Insert(targetNode.Nodes.Count, NewMoveNode);

            }
            else
            {
                if (moveNode.NextNode == targetNode)
                {
                    targetNode.Parent.Nodes.Insert(targetNode.Index + 1, NewMoveNode);
                }
                else
                {
                    targetNode.Parent.Nodes.Insert(targetNode.Index, NewMoveNode);
                }
            }
            //更新当前拖动的节点选择
            treeView1.SelectedNode = NewMoveNode;
            //展开目标节点,便于显示拖放效果
            targetNode.Expand();

            //移除拖放的节点
            moveNode.Remove();
         
        }

 

以上是关于WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)的主要内容,如果未能解决你的问题,请参考以下文章

C#如何在treeview控件winform的所有父子节点中搜索文本

wpf怎么实现主窗口向用户控件传值?

WPF之实现控件内容拖动

C# treeview 实现选取并复制功能

在winform画了一个自定义控件,现在我要在运行后进行拉伸动态改变大小,但快速拉伸就闪烁,怎么消除

C# mouseUp事件