Hur man hittar TreeView-nod efter text

När du utvecklar Delphi-applikationer med TreeView-komponenten kan du stöta på en situation där du behöver söka efter en trädnod som endast ges av noden.

I den här artikeln presenterar vi en snabb och enkel funktion för att få TreeView-nod efter text.

Ett Delphi-exempel

Först bygger vi en enkel Delphi-form som innehåller en TreeView, en knapp, CheckBox och en redigera komponent - lämna alla standardkomponentnamn.

Som du kan föreställa dig kommer koden att fungera som: om GetNodeByText ges av Edit1.Text returnerar en nod och MakeVisible (CheckBox1) är sant, välj node.

Den viktigaste delen är GetNodeByText-funktionen.

Denna funktion iterererar helt enkelt genom alla noderna i ATree TreeView från den första noden (ATree.Items [0]). Iterationen använder GetNext-metoden i klassen TTreeView för att leta efter nästa nod i ATree (ser inuti alla noder i alla underordnade noder). Om noden med text (etikett) som ges av AValue hittas (okänslig från fall till fall) returnerar funktionen noden. Den booleska variabeln AVisible används för att göra noden synlig (om den är dold).

fungera GetNodeByText
(ATree: TTreeView; AValue:Sträng;
AVisible: Boolean): TTreeNode;
var
Nod: TTreeNode;
Börja
Resultat: = noll;
om ATree.Items.Count = 0 sedan Utgång;
Nod: = ATree.Items [0];
medan Nod noll dobeginif UpperCase (Node.Text) = UpperCase (AValue) thenbegin
Resultat: = Nod;
om AVisible sedan
Result.MakeVisible;
Ha sönder;
slutet;
Nod: = Node.GetNext;
slutet;
slutet;

Det här är koden som kör 'Sök Node' -knappen OnClick-händelse:

procedur TForm1.Button1Click (avsändare: TObject);
var
tn: TTreeNode;
Börja
tn: = GetNodeByText (TreeView1, Edit1.Text, CheckBox1.Checked);
om tn = noll sedan
ShowMessage ('Inte hittat!')
elsebegin
TreeView1.SetFocus;
tnValda: = Sann;
slutet;
slutet;

Obs! Om noden är placerad väljer koden noden, om inte ett meddelande visas.

Det är allt. Så enkelt som bara Delphi kan vara. Men om du tittar två gånger ser du att något saknas: koden hittar den FÖRSTA noden som ges av AText.