Drag & Drop innerhalb eines Treeviews
-
Hallo Leute,
hat schon mal jemand die Nodes eines Treeviews mittels Drag & Drop verschoben? Werd grad nicht so richtig schlau aus der Hilfe, vielleicht gibt's ja einen Tipp *hoff*. Im Moment hab ich den Kreis mit Schrägstrich, wenn ich einen Node wegziehen will, kann ihn also nirgendwo fallenlassen, weil alles verboten ist. Der Treeview hat ein TRUE im AllowDrop, was gibt es noch zu beachten?
-
ich habe ein kleines bsp gebastelt.
in dem bsp werden knoten innerhalb gleicher treeview mit der mouse bei gedruckter linker mousetaste verschoben oder kopiert. ist zusätzlich noch die strg-taste gedruckt, wird ein node kopiert.für das bsp muss du AllowDrop auf true setzen und ItemDrag, DragDrop und DragOver ereignisse behandeln
private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e) { if (e.Button == MouseButtons.Left) { DoDragDrop(e.Item, DragDropEffects.All); } } private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e) { Point p = treeView1.PointToClient(new Point(e.X, e.Y)); // prüfen, ob die mouse sich über einem node befindet TreeNode node = treeView1.GetNodeAt(p.X, p.Y); if (node != null) { // nur Nodes zum Drag&Drop zulassen user dem der gezogen wird // RootNode ausschließen object o = e.Data.GetData("System.Windows.Forms.TreeNode"); if (o != null && !node.Equals(o) && !treeView1.Nodes[0].Equals(o)) { // wenn STRG gedruckt ist, dann CopyMode aktivieren if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.Move; } else e.Effect = DragDropEffects.None; } else e.Effect = DragDropEffects.None; } private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { Point p = treeView1.PointToClient(new Point(e.X, e.Y)); // Zielnode TreeNode targetnode = treeView1.GetNodeAt(p.X, p.Y); // Quellnode TreeNode sourcenode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); // neuen Knoten clonen aus dem sourcenode if (e.Effect == DragDropEffects.Copy || e.Effect == DragDropEffects.Move) { TreeNode node = (TreeNode)sourcenode.Clone(); targetnode.Nodes.Add(node); } // sourcenode entfernen if (e.Effect == DragDropEffects.Move) { sourcenode.Remove(); } }
viel spass damit
-
Danke erstmal, sieht schon gut aus *freu*
Ich werde aber erst morgen Abend dazu kommen, das auszutesten.
-
Nochmal Danke - funktioniert prima
Jetzt werde ich mir das noch im Detail zu Gemüte führen, damit ich auch was lerne