Hallo,
Zitat von
epex:
... kann ich nicht einfach den Knoten wegspeichern im Array oder Record und dann später wieder aufrufen über die Select function? ...
das ist genau der erste Weg, den ich beschrieben habe. Wenn die
Query, mit der du dir die Daten für das Befüllen der TreeView besorgt hast, offen bleibt, dann hast du die Daten ja immer verfügbar. Um den jeweiligen Knoten und seinen zugehörigen Record wechselseitig miteinander zu verknüpfen kannst du eine Zwischenstruktur in Form einer assoziativen Liste einführen. Dazu kannst du eine private Form-Variable NodeMap vom Typ TStringList verwenden. Beim Befüllen der TreeView trägst du dann jeden Knoten dort ein:
Delphi-Quellcode:
// ...
tn := TreeView.Nodes.AddChildObject(
Query.FieldByName('
NAME').AsString, Pointer(
Query.RecNo));
NodeMap.AddObject(IntToStr(
Query.RecNo), tn);
// ...
Später kannst du dann über den Knoten den Record der
Query identifizieren oder über die Datensatznummer des Records den zugehörigen Knoten:
Delphi-Quellcode:
var
tn: TTreeNode;
begin
Query.RecNo := Integer(TreeView.Selected.Data);
with NodeMap
do
TTreeNode(Objects[IndexOf(IntToStr(
Query.RecNo))]).Selected := True;
end;
Der zweite von mir beschriebene Weg ist interessant, wenn die Daten über Strings identifiziert werden, wie zum Beispiel die Namen von Dateien über einen Pfad. So kann man auf die Assoziation von Knoten und Record verzichten und kann über einen Suchalgorithmus den Knoten bei Bedarf im Baum lokalisieren. Performanter ist der erste Weg.
Freundliche Grüße