ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
2863
2863
EMPFEHLEN
-
28.08.06 16:25 #1
- Registriert seit
- Mar 2004
- Beiträge
- 441
Hallo miteinander.
Ich habe hier ein Problem im Delphi Studio 2006, bei dem ich nicht mehr weiter weiss.
In meinem Projekt verwende ich eine TTreeView-Komponente, deren einzelnen Knoten Integerwerte in den jeweiligen Data-Feldern zugewiesen sind. Jetzt sollte innerhalb dieses TTreeViews auch Drag & Drop ermöglicht werden. Schön und gut, nur leider spinnt mir anscheinend die MoveTo-Methode gewaltig herum.
Der Code dazu sieht folgendermaßen aus:
tvBrowser: TTreeView;
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
procedure TfmBrowser.tvBrowserDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var tSource, tDest: TTreeNode; begin Accept := false; if Sender is TTreeView then begin Accept := true; tSource := tvBrowser.Selected; tDest := tvBrowser.GetNodeAt(X, Y); if tSource = nil then Accept := false; if tDest = nil then Accept := false; if tSource = tDest then Accept := false; if tDest = tSource.Parent then Accept := false; end; end; procedure TfmBrowser.tvBrowserDragDrop(Sender, Source: TObject; X, Y: Integer); var i: Integer; begin if((Sender <> nil) and (tvBrowser.DropTarget <> nil) and (Source <> nil) and (tvBrowser.Selected <> nil)) then begin tvBrowser.Selected.MoveTo(tvBrowser.DropTarget, naAddChild); tvBrowser.Items[0].Selected := true; end; end;
Das funktioniert auch wunderbar, solange ich nur einen einzigen Drag & Drop mache. Ich kann also einen Knoten oder einen ganzen Zweig mittels Drag & Drop im Baum verschieben wie ich will. Aber wehe, ich will eine zweite Drag & Drop-Aktion ausführen, dann bekomme ich ständig um die Ohren gehauen:
"Das Element wurde bereits hinzugefügt. Schlüssel im Wörterbuch: "1429112" Hinzuzufügender Schlüssel: "1429112". Der Zahlenwert ändert sich dabei immer wieder.
Hat irgend jemand einen Lösungsvorschlag außer dem obligatorischen "nimm Virtual TreeView"?
Nachtrag:
Also ich habe es bisher so weit eingrenzen können:
Offenbar funktioniert die MoveTo-Routine des TTreeView nicht sauber innerhalb von .net. Die intern vergebenen Indizes der einzelnen Nodes (TTreeNode.getIndex, nur Lesezugriff (war ja klar...) ), werden nicht sauber aufgelöst. Sobald dann also die Methode versucht, die kopierten Nodes an der neuen Position in den Tree einzufügen, hustet die .net-Umgebung ohne Ende.
Wenn ich mal etwas mehr Zeit habe, werde ich vielleicht versuchen, eine eigene Methode für den MoveTo zu implementieren und mir dabei das Index-Verhalten der Nodes genauer anschauen, ob ein TTreeNode.Delete denn wenigstens die nicht mehr gültigen Indizes auflöst.Geändert von CSANecromancer (30.08.06 um 11:55 Uhr)
Ähnliche Themen
-
SetViewportOrg und MoveTo undeclared
Von silvanm im Forum C/C++Antworten: 0Letzter Beitrag: 27.01.08, 12:11 -
Mit TTreeView einen Zweig per Code markieren
Von Scrapy im Forum Borland CBuilder und VCLAntworten: 0Letzter Beitrag: 27.03.06, 12:16 -
TTreeView verwenend
Von alixander im Forum Borland CBuilder und VCLAntworten: 1Letzter Beitrag: 05.01.05, 12:48 -
MoveTo undefined!
Von Harrier im Forum C/C++Antworten: 6Letzter Beitrag: 14.01.04, 16:47 -
self.moveTo
Von Bäte im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 09.07.03, 15:12





Zitieren
Login





