Tijdens het ontwikkelen van Delphi-toepassingen met behulp van de TreeView-component, kunt u een situatie tegenkomen waarin u moet zoeken naar een boomknooppunt dat alleen door de tekst van het knooppunt wordt gegeven.
In dit artikel presenteren we u een snelle en eenvoudige functie om TreeView-knooppunt per tekst te krijgen.
Eerst bouwen we een eenvoudig Delphi-formulier met een TreeView, een Button, CheckBox en een component Edit-laat alle standaard componentnamen.
Zoals je je misschien kunt voorstellen, werkt de code ongeveer als: als GetNodeByText gegeven door Edit1.Text een knoop teruggeeft en MakeVisible (CheckBox1) waar is, selecteer dan de knoop.
Het belangrijkste onderdeel is de GetNodeByText-functie.
Deze functie doorzoekt eenvoudig alle knooppunten in de ATree TreeView vanaf het eerste knooppunt (ATree.Items [0]). De iteratie gebruikt de GetNext-methode van de klasse TTreeView om te zoeken naar het volgende knooppunt in de ATree (kijkt in alle knooppunten van alle onderliggende knooppunten). Als het knooppunt met tekst (label) van AValue wordt gevonden (niet hoofdlettergevoelig), retourneert de functie het knooppunt. De booleaanse variabele AVisible wordt gebruikt om het knooppunt zichtbaar te maken (indien verborgen).
functie GetNodeByText
(ATree: TTreeView; AValue:Draad;
AVisible: Boolean): TTreeNode;
var
Knooppunt: TTreeNode;
beginnen
Resultaat: = nul;
als ATree.Items.Count = 0 vervolgens Uitgang;
Knooppunt: = ATree.Items [0];
terwijl Knooppunt nul dobeginif UpperCase (Node.Text) = UpperCase (AValue) thenbegin
Resultaat: = Knooppunt;
als AVisible vervolgens
Result.MakeVisible;
Breken;
einde;
Node: = Node.GetNext;
einde;
einde;
Dit is de code die de OnClick-gebeurtenis 'Knoop zoeken' uitvoert:
procedure TForm1.Button1Click (Sender: TObject);
var
tn: TTreeNode;
beginnen
tn: = GetNodeByText (TreeView1, Edit1.Text, CheckBox1.Checked);
als tn = nul vervolgens
ShowMessage ('Niet gevonden!')
elsebegin
TreeView1.SetFocus;
tn.Selected: = True;
einde;
einde;
Opmerking: Als het knooppunt zich bevindt, selecteert de code het knooppunt, zo niet, dan wordt er een bericht weergegeven.
Dat is het. Zo eenvoudig als alleen Delphi kan zijn. Als je echter twee keer kijkt, zie je dat er iets ontbreekt: de code vindt het EERSTE knooppunt gegeven door AText.