允许用户使用鼠标拖动在 Treeview 中上下移动节点。 C#

Allow User to Move nodes in Treeview up and down using mouse drag. c#

我想知道树视图中是否有任何 属性 允许用户在 运行 时间内使用鼠标拖动上下移动节点(就像交换两个节点而不需要添加额外的按钮)

这是linkdrag nodes in treeview
的代码 它可用于将节点从树拖到另一棵树,但任何人都可以将其自定义为 在同一棵树上

在 Visual C# 中创建一个新的 Windows 应用程序。默认情况下,创建一个名为 Form1 的窗体。 使用工具箱将两个 TreeView 控件添加到 Form1。默认情况下,会创建 TreeView1 和 TreeView2。 要允许拖放 TreeView 控件,请在属性 window 中将 TreeView1 和 TreeView2 的 AllowDrop 属性 更改为 True。 双击 Form1 以生成 Form1 的 Load 事件的方法处理程序。添加以下代码以使用 TreeNode 对象填充两个 TreeView 控件并定义事件处理程序:

添加以下方法处理程序来处理 TreeView1 或 TreeView2 的 ItemDrag 事件,具体取决于拖动操作的方向。此代码启动对正在拖动的项目的移动操作。 私人无效treeView_ItemDrag(对象发件人,

添加以下方法处理程序来处理TreeView1 或TreeView2 的DragEnter 事件,具体取决于拖动操作的方向: private void treeView_DragEnter(对象发送者,

将以下方法添加到 Form1 class,使其紧跟您在上一步中添加的方法

private void form1_Load(object sender, EventArgs e)
    {
        this.treeView.ItemDrag += new ItemDragEventHandler(this.treeView_ItemDrag);
        this.treeView.DragDrop += new DragEventHandler(this.treeView_DragDrop);
        this.treeView.DragEnter += new DragEventHandler(this.treeView_DragEnter);
    }
    private void treeView_ItemDrag(object sender, ItemDragEventArgs e)
    {
        DoDragDrop(e.Item, DragDropEffects.Move);
        _selectedNode = (TreeNode)e.Item;
    }
    private void treeView_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }
    private void treeView_DragDrop(object sender, DragEventArgs e)
    {
        TreeNode sourceNode = _selectedNode;
        if (sourceNode != null)
        {
            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
            {
                Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                TreeNode destinationNode = ((TreeView)sender).GetNodeAt(pt);
                if (destinationNode != null)
                {
                    //ur target
                }
            }
        }
    }