- im Beispiel wird eine TreeNode innerhalb des TreeViews verschoben
- als erstes ist das Ereignis ItemDrag zu behandeln:
private void TreeView1_ItemDrag(object sender, ItemDragEventArgs e) { TreeView tv = sender as TreeView; if (tv != null) { if (tv.SelectedNode != null) { tv.DoDragDrop(tv.SelectedNode, DragDropEffects.Copy); } } }
- beim TreeView muss die Eigenschaft AllowDrop = True gesetzt sein
- zusätzlich sind die Ereignisse DragOver und DragDrop zu behandeln:
private void TreeView1_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; // Quellnode TreeNode tns = e.Data.GetData(typeof(TreeNode)) as TreeNode; // akt. Zielnode unter dem Mauspfeil TreeNode tnd = TreeView1.GetNodeAt(TreeView1.PointToClient(new Point(e.X, e.Y))); if ((tns != null) && (tnd != null)) { // hier im Beispiel die Verschiebung nur zulassen, wenn ChildNodes (Level == 1) // auf andere Parent-/Rootnodes (Level == 0) gezogen werden. if ((TreeView1.SelectedNode.Level == 1) && (tnd.Level == 0) && (tnd != tns.Parent)) { e.Effect = DragDropEffects.Copy; } } } private void TreeView1_DragDrop(object sender, DragEventArgs e) { // Quellnode TreeNode tns = e.Data.GetData(typeof(TreeNode)) as TreeNode; // akt. Zielnode unter dem Mauspfeil TreeNode tnd = TreeView1.GetNodeAt(TreeView1.PointToClient(new Point(e.X, e.Y))); if ((tns != null) && (tnd != null)) { // neue TreeNode aus Clone der Quellnode erstellen TreeNode tnnew = (TreeNode)tns.Clone(); tnd.Nodes.Add(tnnew); tnd.Expand(); // alte Quell-TreeNode entfernen TreeNode cat = tns.Parent; cat.Nodes.Remove(tns); } }