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

时间:2019-03-21 08:41:37

标签: c#-3.0

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

1 个答案:

答案 0 :(得分:0)

以下是此链接drag nodes in treeview的代码
它可以用来将节点从树上拖到另一棵上,但是任何人都可以将其自定义为 在同一棵树中

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

添加以下方法处理程序,以处理TreeView1或TreeView2的ItemDrag事件,具体取决于拖动操作的方向。此代码对要拖动的项目启动移动操作。 私有void treeView_ItemDrag(对象发送者,

根据拖动操作的方向,添加以下方法处理程序来处理TreeView1或TreeView2的DragEnter事件: 私有void treeView_DragEnter(对象发送者,

将以下方法添加到Form1类中,以便它立即遵循您在上一步中添加的方法

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