Zitat von
haentschman:
hmmm... irgendwie habe ich das Gefühl daß wir uns mißverstehen.
Nicht 'wir uns', sondern 'Du mich'.
Zitat von
haentschman:
...dümmlich ist nur, daß man an die Data Eigenschaft nur dran kommt, wenn man den Index des Knotens kennt.
Delphi-Quellcode:
Function IndexOfNode(aDataContents : Integer) : Integer;
Begin
For Result:=0 to TreeView.Nodes.Count-1 do
If Integer (TreeView.Nodes[Result].Data) = aDataContents Then
Exit;
Result := -1
End;
So bekommst Du dann den Index des Knotens. Also nix mit '...dümmlich..'
Du deklarierst deine ID als Konstanten, z.B.
Delphi-Quellcode:
Const
IDDatenbankSeite = 0;
IDBenutzereinstellungen = 1;
...
Dann fügst Du die Knoten in deinen Baum ein, wobei Du der 'Data'-Eigenschaft die ID-Konstanten zuweist.
Auf einen konkreten Knoten (z.B. den mit den Benutzereinstellungen) greifst Du dann so zu:
TreeView.Nodes[IndexOfNode(IDBenutzereinstellungen)].Selected := True
Wenn Dir das zu blöd ist, merkst Du Dir die Indizes der einzelnen ID-Konstanten. Allerdings musst Du die dann bei Änderungen an der Baumstruktur erneut zuweisen:
Delphi-Quellcode:
Var
idxDatenbankseite,
idxBenutzereinstellungen : Integer;
...
idxDatenbankseite := IndexOfNode(IDDatenbankSeite);
idxBenutzereinstellungen := IndexOfMode(IDBenutzereinstellungen);
...
TreeView.Nodes[idxBenutzereinstellungen].Selected := True
Übrigens hätte ich als Anwender ein Riesenproblem damit, das sich die Reihenfolge des Baumes ändert, wenn neue Eigenschaftsseiten hinzukommen. Anwender bevorzugen kleiche *Positionen* von Dingen als wenn sie in einer sortierten Liste jedesmal suchen müssen. Du hättest in unterschiedlichen Sprachen auch ein unterschiedliches Layout. Toll für den, der deine Anwendung in beiden Sprachen bedienen muss.
Obige vorgeschlagene Trennung von Position und Identifikation bleibt jedoch hiervon unberührt, da es die klar robustere Implementierung ggü. fest verdrahteten Index-Konstanten ist.