Uložte více vlastních dat do stromu uzlu v Delphi

TTreeView Delphi komponenta zobrazí hierarchický seznam položek— uzly stromů. Uzel je představován textem uzlu a volitelným obrázkem. Každý uzel ve stromovém zobrazení je instancí třídy TTreeNode.

I když můžete vyplnit stromové zobrazení pomocí položek v době návrhu, použijte Editor položek TreeView, ve většině případů byste vyplnili zobrazení stromu v době spuštění - v závislosti na tom, o čem je vaše aplikace.

Editor položek TreeView ukazuje, že existuje pouze několik informací, které můžete „připojit“ k uzlu: text a několik indexů obrázků (pro normální stav, rozbalené, vybrané a podobně).

Komponenta stromového pohledu se v podstatě snadno programuje. Existuje několik metod, jak do stromu přidat nové uzly a nastavit jejich hierarchii.

Zde je postup, jak přidat 10 uzlů do stromového zobrazení (s názvem „TreeView1“). Vlastnost Položky poskytuje přístup ke všem uzlům ve stromu. AddChild přidá nový uzel do stromového zobrazení. Prvním parametrem je nadřazený uzel (pro vytvoření hierarchie) a druhým parametrem je text uzlu.

instagram viewer

AddChild vrátí nově přidaný TTreeNode. Ve výše uvedeném ukázka kódu, všech 10 uzlů se přidá jako kořenové uzly (nemají nadřazený uzel).

V komplikovanějších situacích byste chtěli, aby vaše uzly obsahovaly více informací - nejlépe by měly mít nějaké speciální hodnoty (vlastnosti), které jsou specifické pro projekt, který vyvíjíte.

Řekněme, že chcete zobrazit data o objednávce zboží ze své databáze. Každý zákazník může mít více objednávek a každá objednávka je složena z více položek. Toto je hierarchický vztah, který lze zobrazit ve stromovém zobrazení:

Ve vaší databázi bude více informací pro každou objednávku a pro každou položku. Ve stromovém zobrazení se zobrazuje aktuální stav (jen pro čtení) - a chcete vidět podrobnosti o vybrané objednávce (nebo dokonce o položce).

Když uživatel vybere uzel "Order_1_1", chcete, aby se uživateli zobrazily podrobnosti objednávky (celková částka, datum atd.).

V tuto chvíli můžete načíst požadovaná data z databáze, ale musíte znát jedinečný identifikátor (řekněme celočíselnou hodnotu) vybraného příkazu, abyste získali správná data.

Potřebujeme způsob, jak uložit tento identifikátor objednávky spolu s uzlem, ale nemůžeme použít vlastnost Text. Vlastní hodnota, kterou musíme uložit v každém uzlu, je celé číslo (pouze příklad).

Když k takové situaci dojde, můžete být v pokušení vyhledat vlastnost Tag (mnoho komponent Delphi má), ale vlastnost Tag není vystavena třídou TTreeNode.

Přidat vlastní data do stromových uzlů: TreeNode. Vlastnost dat

Vlastnost Data ve stromovém uzlu umožňuje přiřadit vaše vlastní data ke stromovému uzlu. Data jsou a ukazatel a může ukazovat na objekty a záznamy. Zobrazení dat XML (RSS Feed) ve TreeView ukazuje, jak uložit typ záznamu proměnná do vlastnosti Data ve stromovém uzlu.

Mnoho tříd typu položek vystavuje vlastnost Data - můžete použít k uložení libovolného objektu spolu s položkou. Příkladem je TListItem komponenty TListView. Tady je jak přidat objekty do vlastnosti Data.

Přidání vlastních dat do stromových uzlů: TreeView. CreateNodeClass

Pokud nechcete používat vlastnost Data TTreeNode, ale raději byste chtěli rozšířit svůj vlastní TreeNode o několik vlastností, Delphi má také řešení.

Řekněme, že chcete být schopni

Zde je návod, jak rozšířit standardní TTreeNode s několika vlastními vlastnostmi:

  1. Vytvořte svůj TMyTreeNode rozšířením TTreeNode.
  2. Přidejte vlastnost řetězce MyProperty.
  3. Manipulujte s OnCreateNodeClass pro stromové zobrazení a určete, zda má být vytvořena třída uzlů.
  4. Na úrovni formuláře vystavte něco jako vlastnost TreeView1_SelectedNode. To by bylo typu TMyTreeNode.
  5. Zpracováním OnChange ve stromovém zobrazení zapíšete do vybraného uzlu hodnotu uzlu, který je vybrán.
  6. Pomocí TreeView1_Selected.myProperty můžete číst nebo zapisovat novou vlastní hodnotu.

Zde je úplný zdrojový kód (TButton: „Button1“ a TTreeView: „TreeView1“ ve formuláři):

Tentokrát není použita vlastnost Data třídy TTreeNode. Spíše rozšíříte třídu TTreeNode tak, abyste měli vlastní verzi stromového uzlu: TMyTreeNode.

Pomocí události OnCreateNodeClass ve stromovém zobrazení vytvoříte místo standardní třídy TTreenode uzel vlastní třídy.