TTreeView Delphi komponenta prikaže hierarhični seznam elementov - drevesna vozlišča. Vozlišče je predstavljeno z besedilom vozlišča in izbirno sliko. Vsako vozlišče v drevesnem pogledu je primerek razreda TTreeNode.
Medtem ko lahko drevesni pogled s predmeti v času načrtovanja izpolnite s pomočjo TreeView urejevalnik elementov, v večini primerov bi svoj drevesni pogled zapolnili v času izvajanja - odvisno od tega, kakšna je aplikacija.
Urejevalnik elementov TreeView razkrije, da obstaja le peščica informacij, ki jih lahko "pritrdite" na vozlišče: besedilo in nekaj slikovnih indeksov (za normalno stanje, razširjeno, izbrano in podobno).
V bistvu je sestavni del drevesnega pogleda enostavno programirati. Obstaja nekaj načinov za dodajanje novih vozlišč v drevo in nastavitev njihove hierarhije.
Takole lahko v drevesni pogled dodate 10 vozlišč (z imenom "TreeView1"). Upoštevajte, da lastnost Item omogoča dostop do vseh vozlišč na drevesu. AddChild doda novo vozlišče drevesnemu pogledu. Prvi parameter je nadrejeno vozlišče (za izgradnjo hierarhije), drugi parameter pa je besedilo vozlišča.
AddChild vrne novo dodano TTreeNode. V zgornjem vzorec kode, so vsa 10 vozlišč dodana kot korenska vozlišča (nimajo matičnega vozlišča).
V vseh bolj zapletenih situacijah želite, da imajo vaša vozlišča več informacij - po možnosti, da imajo nekatere posebne vrednosti (lastnosti), ki so značilne za projekt, ki ga razvijate.
Recimo, da želite iz podatkovne baze prikazati podatke o izdelku po naročilu. Vsaka stranka ima lahko več naročil, vsako naročilo pa je sestavljeno iz več artiklov. To je hierarhični odnos, ki ga lahko prikažemo v drevesnem pogledu:
V vaši zbirki podatkov bi bilo več informacij za vsako naročilo in za vsak artikel. Pogled drevesa prikazuje trenutno stanje (samo za branje) - in želite videti podrobnosti za izbrano naročilo (ali celo za izdelek).
Ko uporabnik izbere vozlišče "Order_1_1", želite, da se uporabnikom prikažejo podrobnosti naročila (skupna vsota, datum itd.).
V tem času lahko iz baze podatkov pridobite zahtevane podatke, vendar boste morali poznati edinstven identifikator (recimo celoštevilčno vrednost) izbranega vrstnega reda, če želite zajeti prave podatke.
Potrebujemo način za shranjevanje tega identifikatorja naročila skupaj z vozliščem, vendar ne moremo uporabiti lastnosti Text. Vrednost po meri, ki jo moramo shraniti v vsako vozlišče, je celo število (samo primer).
Ko se takšna situacija zgodi, bi vas lahko zamikalo, da bi poiskali lastnost Tag (veliko komponent Delphi ima), vendar razred TTreeNode ne izpostavi lastnosti znamke.
Dodajte podatke po meri vozliščem drevesa: TreeNode. Lastnost podatkov
Lastnost Data vozlišča drevesa vam omogoča, da svoje podatke po meri povežete z drevesnim vozliščem. Podatki so a kazalec in lahko kaže na predmete in zapise. Prikaz podatkov XML (RSS feed) v TreeView prikazuje, kako shraniti vrsta zapisa spremenljivko v lastnost Data drevesnega vozlišča.
Številni razredi vrst predmetov izpostavljajo lastnost Data - lahko uporabite shranjevanje katerega koli predmeta skupaj z njim. Primer je TListItem komponente TListView. Tukaj je kako dodati predmete v lastnost Data.
Dodajte podatke po meri vozliščem drevesa: The TreeView. CreateNodeClass
Če ne želite uporabljati lastnosti Data TTreeNode, ampak bi radi, da imate svoj TreeNode razširjen z nekaj lastnostmi, ima Delphi tudi rešitev.
Recite, da želite to storiti
Tukaj je opisano, kako razširiti standardni TTreeNode z nekaj lastnimi lastnostmi:
- Ustvarite svoj TMyTreeNode tako, da razširite TTreeNode.
- Dodajte mu lastnosti lastnosti MyProperty.
- Z drevesnim pogledom si oglejte OnCreateNodeClass, da določite, kakšen razred vozlišča je treba ustvariti.
- Izpostavite nekaj takega kot lastnost TreeView1_SelectedNode na ravni obrazca. To bi bilo tipa TMyTreeNode.
- Ročaj OnChange pogleda drevesa, če želite v izbrano vozlišče zapisati vrednost izbranega vozlišča.
- Uporabite TreeView1_Selected.myProperty za branje ali pisanje nove vrednosti po meri.
Tu je celotna izvorna koda (TButton: "Button1" in TTreeView: "TreeView1" na obrazcu):
Tokrat lastnost Data razreda TTreeNode ni uporabljena. Namesto tega razred TTreeNode razširite tako, da imate svojo različico drevesnega vozlišča: TMyTreeNode.
Z dogodkom OnCreateNodeClass drevesnega pogleda ustvarite vozlišče razreda po meri namesto standardnega razreda TTreenode.