Lagre mer tilpassede data i treknuten i Delphi

click fraud protection

TTreeView Delphi komponent viser en hierarkisk liste over elementer— treknuter. En node blir presentert av nodetekst og et valgfritt bilde. Hver node i trevisningen er et eksempel på en TTreeNode-klasse.

Mens du kan fylle ut trevisningen med elementer på designtidspunktet, bruker du TreeView Items Editor, i de fleste tilfeller ville du fylt trevisningen din på kjøretid - avhengig av hva applikasjonen din handler om.

TreeView Items Editor avslører at det bare er en håndfull informasjon du kan "knytte" til en node: tekst og noen få bildeindekser (for normal tilstand, utvidet, valgt og likt).

I hovedsak er treutsiktkomponenten enkel å programmere mot. Det er et par metoder for å legge til nye noder i treet og angi hierarkiet.

Slik legger du til 10 noder i trevisningen (kalt "TreeView1"). Merk at Items-egenskapene gir tilgang til alle noder i treet. AddChild legger til en ny node i trevisningen. Den første parameteren er overordnet node (for å bygge opp hierarkiet) og den andre parameteren er nodeteksten.

instagram viewer

AddChild returnerer den nylig tilførte TTreeNode. I ovennevnte kodeeksempel, blir alle 10 noder lagt til som rotnoder (har ingen overordnede noder).

I mer komplekse situasjoner ønsker du at nodene dine skal ha mer informasjon - helst å ha noen spesielle verdier (egenskaper) som er spesifikke for prosjektet du utvikler.

Si at du vil vise data fra kundeordrevare fra databasen. Hver kunde kan få flere bestillinger, og hver bestilling består av flere varer. Dette er en hierarkisk relasjon man kan vise i en trevisning:

I databasen din vil det være mer info for hver ordre og for hvert element. Trevisningen viser gjeldende tilstand (bare for lesing) - og du vil se detaljer for den valgte ordren per ordre (eller til og med per vare).

Når brukeren velger noden "Order_1_1", vil du at ordredetaljene (total sum, dato osv.) Skal vises for brukeren.

Du kan på det tidspunktet hente de nødvendige dataene fra databasen, MEN du trenger å kjenne den unike identifikatoren (la oss si en heltalverdi) for den valgte ordren for å hente riktig data.

Vi trenger en måte å lagre denne ordreidentifikatoren sammen med noden, men vi kan ikke bruke Tekst-egenskapen. Den tilpassede verdien vi trenger å lagre i hver node er et helt tall (bare et eksempel).

Når en slik situasjon oppstår, kan du bli fristet til å lete etter Tag-egenskapen (mange Delphi-komponenter har), men Tag-egenskapen blir ikke eksponert av TTreeNode-klassen.

Legg til egendefinerte data til trenoder: TreeNode. Dataeiendom

Dataegenskapen til en treknute lar deg knytte dine tilpassede data til en treknute. Data er en pekeren og kan peke på objekter og poster. Visning av XML-data (RSS-feed) i en TreeView viser hvordan du lagrer en posttype variabel i Data-egenskapen til en treknute.

Mange elementtypeklasser utsetter egenskapen Data - du kan bruke til å lagre ethvert objekt sammen med elementet. Et eksempel er TListItem for en TListView-komponent. her er hvordan du legger til objekter i Data-egenskapen.

Legg til egendefinerte data til trenoder: TreeView. CreateNodeClass

Hvis du ikke vil bruke Data-egenskapen til TTreeNode, men heller ønsker å få utvidet din egen TreeNode med noen få egenskaper, har Delphi også en løsning.

Si at du vil kunne gjøre det

Slik utvider du standard TTreeNode med noen få egne egenskaper:

  1. Lag din TMyTreeNode ved å utvide TTreeNode.
  2. Legg til det en strengegenskap MyProperty.
  3. Håndter OnCreateNodeClass for trevisningen for å spesifisere nodeklassen din skal opprettes.
  4. Utsett noe som TreeView1_SelectedNode-egenskapen på skjemanivå. Dette vil være av typen TMyTreeNode.
  5. Håndter trevisens OnChange for å skrive til den valgte koden verdien av noden som er valgt.
  6. Bruk TreeView1_Selected.myProperty til å lese eller skrive ny tilpasset verdi.

Her er den fullstendige kildekoden (TButton: "Button1" og TTreeView: "TreeView1" på et skjema):

Denne gangen brukes ikke Data-egenskapen til TTreeNode-klassen. Snarere utvider du TTreeNode-klassen til å ha din egen versjon av en treknute: TMyTreeNode.

Ved hjelp av OnCreateNodeClass-hendelsen i trevisningen oppretter du en node av den tilpassede klassen i stedet for standard TTreenode-klassen.

instagram story viewer