Uložte viac vlastných údajov do stromu v Delphi

click fraud protection

TTreeView Delphi komponent zobrazí hierarchický zoznam položiek— uzly stromov. Uzol je prezentovaný textom uzla a voliteľným obrázkom. Každý uzol v stromovom prehľade je inštanciou triedy TTreeNode.

Aj keď môžete vyplniť stromový prehľad položkami v čase návrhu, použite Editor položiek TreeView, vo väčšine prípadov vyplníte stromové zobrazenie v čase spustenia - v závislosti od toho, o čom je vaša aplikácia.

Editor položiek TreeView odhaľuje, že k uzlu existuje iba niekoľko informácií, ktoré môžete „priložiť“: text a niekoľko indexov obrázkov (pre normálny stav, rozšírené, vybrané a podobne).

V podstate je zložka stromového pohľadu ľahko programovateľná. Existuje niekoľko metód na pridanie nových uzlov do stromu a nastavenie ich hierarchie.

Tu je postup, ako pridať 10 uzlov do stromového prehľadu (s názvom „TreeView1“). Všimnite si, že vlastnosť Položky poskytuje prístup ku všetkým uzlom v strome. AddChild pridá nový uzol do stromového prehľadu. Prvý parameter je nadradený uzol (na vytvorenie hierarchie) a druhým parametrom je text uzla.

instagram viewer

AddChild vráti novo pridaný TTreeNode. Vo vyššie uvedenom vzorka kódu, všetkých 10 uzlov sa pridá ako koreňové uzly (nemajú nadradený uzol).

V komplikovanejších situáciách by ste chceli, aby vaše uzly obsahovali viac informácií - najlepšie by mali mať niektoré špeciálne hodnoty (vlastnosti), ktoré sú špecifické pre projekt, ktorý vyvíjate.

Povedzme, že chcete zobraziť údaje o objednávke zákazníka z vašej databázy. Každý zákazník môže mať viac objednávok a každá objednávka je zložená z viacerých položiek. Toto je hierarchický vzťah, ktorý je možné zobraziť v stromovom prehľade:

Vo vašej databáze by bolo viac informácií pre každú objednávku a pre každú položku. V stromovom prehľade sa zobrazuje aktuálny stav (len na čítanie) - a chcete vidieť podrobnosti o vybranej objednávke (alebo dokonca o položke).

Keď používateľ vyberie uzol „Order_1_1“, aby sa zobrazili podrobnosti objednávky (celková suma, dátum atď.).

V tom čase môžete načítať požadované údaje z databázy, ALE musíte poznať jedinečný identifikátor (povedzme celočíselnú hodnotu) vybratého príkazu na získanie správnych údajov.

Potrebujeme spôsob, ako uložiť tento identifikátor objednávky spolu s uzlom, ale nemôžeme použiť vlastnosť Text. Vlastná hodnota, ktorú musíme uložiť v každom uzle, je celé číslo (len príklad).

Ak sa takáto situácia stane, môžete byť v pokušení vyhľadať vlastnosť Tag (veľa komponentov Delphi má), ale vlastnosť Tag nie je vystavená triede TTreeNode.

Pridajte vlastné údaje do stromových uzlov: TreeNode. Vlastnosť údajov

Vlastnosť Data v uzle stromu vám umožňuje priradiť vaše vlastné údaje k uzlu stromu. Údaje sú a ukazovateľ a môžu ukazovať na objekty a záznamy. Zobrazenie údajov XML (RSS Feed) v TreeView ukazuje, ako uložiť a typ záznamu premenná do vlastnosti Data stromového uzla.

Mnoho tried typu položiek vystavuje vlastnosť Data - môžete použiť na uloženie ľubovoľného objektu spolu s položkou. Príkladom je TListItem komponentu TListView. tady ako pridať objekty do vlastnosti Data.

Pridajte vlastné údaje do stromových uzlov: TreeView. CreateNodeClass

Ak nechcete používať vlastnosť Data v TTreeNode, ale radšej by ste chceli rozšíriť svoj vlastný TreeNode o niekoľko vlastností, Delphi má tiež riešenie.

Povedzme, že to chceš urobiť

Tu je návod, ako rozšíriť štandardný TTreeNode o niekoľko vlastných vlastností:

  1. Vytvorte svoj TMyTreeNode rozšírením TTreeNode.
  2. Pridajte vlastnosť reťazca MyProperty.
  3. Manipulujte s OnCreateNodeClass pre stromové zobrazenie, aby ste určili, že by mala byť vytvorená vaša trieda uzlov.
  4. Odhaľte niečo ako vlastnosť TreeView1_SelectedNode na úrovni formulára. Toto by malo byť typu TMyTreeNode.
  5. Zaobchádzajte so stromovým prepínačom OnChange, ak chcete do vybraného uzla zapísať hodnotu vybraného uzla.
  6. Na čítanie alebo zápis novej vlastnej hodnoty použite TreeView1_Selected.myProperty.

Toto je úplný zdrojový kód (TButton: „Button1“ a TTreeView: „TreeView1“ vo formulári):

Tentoraz sa nepoužíva vlastnosť Data triedy TTreeNode. Skôr rozširujete triedu TTreeNode, aby ste mali vlastnú verziu stromového uzla: TMyTreeNode.

Pomocou udalosti OnCreateNodeClass stromového prehľadu namiesto štandardnej triedy TTreenode vytvoríte uzol svojej vlastnej triedy.

instagram story viewer