Drag&Drop گره های TreeView

یک کنترل treeView بر روی فرم قرار داده و کدهای زیر را در رویدادهای Load فرم ، ItemDrag ، DragEnter و DragDrop کنترل treeView بنویسید :

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DragAndDropTreeView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                TreeNode node = new TreeNode("Node " + i);
                for (int j = 0; j < 3; j++)
                {
                    TreeNode n1 = new TreeNode("Sub-node :" + i + " - " + j);
                    node.Nodes.Add(n1);
                }
                treeView1.Nodes.Add(node);
            }
        }

        private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            DoDragDrop(e.Item, DragDropEffects.Move);
        }

        private void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            TreeNode NewNode;
            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);
                NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
                DestinationNode.Nodes.Add((TreeNode)NewNode.Clone());
                DestinationNode.Expand();
                //Remove Original Node
                NewNode.Remove();
            }
        }        
    }
}

برنامه را اجرا و با درگ کردن گره ها نتیجه را مشاهده کنید.