![]() |
Nodes mit Daten (TTreeNodeEx) durchsuchen
Hallo,
ich habe ein Treeview, dessen Nodes ich mit Daten versehen habe (allgemein meist als TTreeNodeEx bezeichnet). Nun stehe ich vor dem Problem, dass ich nach eben diesen Daten suchen möchte. Klar wäre es ganz einfach mit
Delphi-Quellcode:
umzusetzen, jedoch kann "Eintrag1" (was natürlich nur ein Platzhalter ist, im Code werde ich dann schon ein wenig spezifischer) variieren, so dass das Kriterium auch in Eintrag2, Eintrag3, ... gesucht werden könnte.
for i := 0 to treeview.Items.Count-1 do
if((treeview.Items[i]) as TTreeNodeEx.Eintrag1 = Auswahlkriterium) then {mach irgendwas} Je nach Gegebenheit möchte ich der Funktion also übergeben, in welchem Datenbereich (ist das eigentlich einer, oder ist das eine Subklasse?) sie nach was suchen soll (also z. B. "Suche xy in Eintrag1" oder "Suche xy in Eintrag2"). Die einfachste Lösung wäre natürlich, dafür eine Weiche zu schreiben und die obige Suche einfach x-mal für die verschiedenen Bereiche einzubinden. Das wäre aber ziemlich unelegant und sicherlich unnötig. Meine Frage ist nun: Wie kann ich diese Bereiche direkt ansprechen (also nach dem Motto "Node.(Bereich)")? Vielen Dank und gute Nacht Opa |
AW: Nodes mit Daten (TTreeNodeEx) durchsuchen
Das geht entweder mit RTTI-Informationen. Aber eine Klasse, die es erlaubt, in ihren Daten zu suchen, sollte eine solche Methode bereitstellen. Wie das intern gelöst ist, ist dann ja zweitrangig. So wäre das imho am einfachsten umzusetzen.
Reflection geht natürlich auch (ach, in Delphi heißt das ja irgendwie RTTI o.ä.)
Delphi-Quellcode:
Procedure TMyTreeData.Search (aText : String; aNode : TNodeType) : Boolean;
Begin case aNode of Eintrag1 : result := Eintrag1=aText; Eintrag2 : result := Eintrag2=aText; ... end end; |
AW: Nodes mit Daten (TTreeNodeEx) durchsuchen
spendiere deiner Klasse TTreeNodeEx doch eine Methode SearchAll():
Delphi-Quellcode:
Falls du mehrere Klassen von TTreeNodeEx abgeleitet hast machst du die Suchfunktion eben virtuell.
function TTreeNodeEx.SearchAll(const s:string):Boolean;
begin Result := (Eintrag1=s) or (Eintrag2=s) or (IntToStr(Eintrag3)=s); end; for i := 0 to treeview.Items.Count-1 do if ((treeview.Items[i]) as TTreeNodeEx).SearchAll(Auswahlkriterium) then {mach irgendwas} |
AW: Nodes mit Daten (TTreeNodeEx) durchsuchen
Super, ich danke euch.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz