TTreeView Delphi komponent viser en hierarkisk liste over poster— træknudepunkter. En knude præsenteres af nodetekst og et valgfrit billede. Hver knude i en trævisning er et eksempel på en TTreeNode-klasse.
Mens du kan udfylde trævisningen med genstande på designtidspunktet ved hjælp af TreeView Items Editor, i de fleste tilfælde ville du udfylde din trævisning ved kørsel - afhængigt af hvad din applikation handler om.
TreeView Items Editor afslører, at der kun er en håndfuld information, du kan "vedhæfte" til en knude: tekst og et par billedindekser (for normal tilstand, udvidet, valgt og ens).
I det væsentlige er trævisningskomponenten let at programmere imod. Der er et par metoder til at tilføje nye noder til træet og indstille deres hierarki.
Sådan tilføjes 10 noder til trævisningen (kaldet "TreeView1"). Bemærk, at egenskaben Items giver adgang til alle noder i træet. AddChild tilføjer en ny knude til trævisningen. Den første parameter er den overordnede knude (for at opbygge hierarkiet), og den anden parameter er nodeteksten.
AddChild returnerer den nyligt tilføjede TTreeNode. I ovenstående kodeeksempel, tilføjes alle 10 noder som rodnoder (har ingen overordnede knudepunkter).
I mere komplekse situationer ønsker du, at dine noder skal have mere info - helst have nogle specielle værdier (egenskaber), der er specifikke for det projekt, du udvikler.
Lad os sige, at du vil vise data om kundeordre-vare fra din database. Hver kunde kan få flere ordrer, og hver ordre består af flere varer. Dette er en hierarkisk relation, man kan vise i en trævisning:
I din database er der mere info for hver ordre og for hver vare. Trævisningen viser den (læste) aktuelle tilstand - og du vil se pr. Ordre (eller endda pr. Vare) detaljer for den valgte ordre.
Når brugeren vælger noden "Order_1_1", ønsker du, at ordredetaljerne (samlet sum, dato osv.) Skal vises for brugeren.
Du kan på det tidspunkt hente de krævede data fra databasen, MEN du bliver nødt til at kende den unikke identifikator (lad os sige en heltalværdi) af den valgte rækkefølge for at få fat i de rigtige data.
Vi har brug for en måde at gemme denne ordreidentifikation sammen med noden, men vi kan ikke bruge egenskaben Tekst. Den brugerdefinerede værdi, vi har brug for at gemme i hver knude, er et heltal (bare et eksempel).
Når en sådan situation sker, kan du blive fristet til at lede efter egenskaben Tag (mange Delphi-komponenter har), men egenskaben Tag eksponeres ikke af TTreeNode-klassen.
Føj brugerdefinerede data til trænoder: TreeNode. Dataejendom
Dataegenskaben for en træknude giver dig mulighed for at knytte dine brugerdefinerede data til en træknude. Data er a pointer og kan pege på objekter og poster. Visning af XML-data (RSS-feed) i en TreeView viser, hvordan du gemmer en posttype variabel i egenskaben Data i en træknude.
Mange elementtypeklasser afslører egenskaben Data - du kan bruge til at gemme ethvert objekt sammen med elementet. Et eksempel er TListItem for en TListView-komponent. Her er hvordan man tilføjer objekter til egenskaben Data.
Føj brugerdefinerede data til trænoder: TreeView. CreateNodeClass
Hvis du ikke vil bruge egenskaben Data i TTreeNode, men snarere gerne vil have din egen TreeNode udvidet med et par egenskaber, har Delphi også en løsning.
Sig, at du vil være i stand til at gøre
Sådan udvides standard TTreeNode med et par egne egenskaber:
- Opret din TMyTreeNode ved at udvide TTreeNode.
- Tilføj det til en strengegenskab MyProperty.
- Håndter OnCreateNodeClass for trævisningen for at specificere din nodeklasse skal oprettes.
- Udsæt noget som TreeView1_SelectedNode-egenskab på formularniveau. Dette ville være af typen TMyTreeNode.
- Håndter trævisnings OnChange for at skrive til den valgte knude værdien af den knude, der er valgt.
- Brug TreeView1_Selected.myProperty til at læse eller skrive ny brugerdefineret værdi.
Her er den fulde kildekode (TButton: "Button1" og TTreeView: "TreeView1" på en formular):
Denne gang bruges egenskaben Data i TTreeNode-klassen ikke. I stedet for at udvide klassen TTreeNode til at have din egen version af en træknude: TMyTreeNode.
Ved hjælp af begivenheden OnCreateNodeClass i trævisningen opretter du en knude til din brugerdefinerede klasse i stedet for standard TTreenode-klassen.