Съхранявайте повече персонализирани данни в възел на дърво в Delphi

TTreeView Delphi компонент показва йерархичен списък на елементите - дървесни възли. Възелът се представя от текст на възела и незадължително изображение. Всеки възел в изглед на дърво е екземпляр от клас TTreeNode.

Въпреки че можете да попълните изгледа на дървото с елементи по време на проектиране, като използвате TreeView редактор на елементи, в повечето случаи бихте запълнили изгледа на дърво по време на изпълнение - в зависимост от това за какво е приложението ви.

Редакторът на елементи на TreeView разкрива, че има само шепа информация, която можете да "прикачите" към възел: текст и няколко индекса на изображения (за нормално състояние, разширени, избрани и подобни).

По същество компонентът за изглед на дърво е лесно да се програмира. Има няколко метода за добавяне на нови възли към дървото и задаване на тяхната йерархия.

Ето как да добавите 10 възли към изгледа на дърво (наречен "TreeView1"). Обърнете внимание, че свойството Item осигурява достъп до всички възли в дървото. AddChild добавя нов възел към изгледа на дървото. Първият параметър е родителският възел (за изграждане на йерархия), а вторият параметър е текстът на възела.

instagram viewer

AddChild връща ново добавената TTreeNode. В горното проба на код, всички 10 възли са добавени като коренни възли (нямат родителски възел).

Във всички по-сложни ситуации бихте искали вашите възли да носят повече информация - за предпочитане да имат някои специални стойности (свойства), специфични за проекта, който разработвате.

Кажете, че искате да покажете данни от артикули за клиент от вашата база данни. Всеки клиент може да има повече поръчки и всяка поръчка е съставена от повече артикули. Това е йерархично отношение, което може да се покаже в изглед на дърво:

Във вашата база данни ще има повече информация за всяка поръчка и за всеки артикул. Изгледът с дърво показва текущото състояние (само за четене) - и искате да видите подробности за избраната поръчка (или дори за артикул).

Когато потребителят избере възела "Order_1_1", искате да се покажат на потребителя данните за поръчката (обща сума, дата и т.н.).

По това време можете да извлечете необходимите данни от базата данни, НО ще трябва да знаете уникалния идентификатор (да кажем цяло число) на избрания ред, за да вземете правилните данни.

Нуждаем се от начин да съхраним този идентификатор на поръчка заедно с възела, но не можем да използваме свойството Text. Персонализираната стойност, която трябва да съхраним във всеки възел, е цяло число (само пример).

Когато се случи такава ситуация, може да се изкушите да потърсите свойството Tag (има много компоненти на Delphi), но свойството Tag не е изложено от класа TTreeNode.

Добавете персонализирани данни към дървесни възли: The TreeNode. Свойство на данните

Свойството Data на дървесен възел ви позволява да свържете персонализираните си данни с дървесен възел. Данните са a показалка и може да сочи към обекти и записи. Показването на XML (RSS емисии) данни в TreeView показва как да съхранявате тип запис променлива в свойството Data на дърво възел.

Много класове тип артикули излагат свойството Данни - можете да използвате, за да съхранявате всеки обект заедно с елемента. Пример е TListItem на компонент на TListView. Ето как да добавите обекти към свойството Данни.

Добавяне на персонализирани данни към дървесни възли: The TreeView. CreateNodeClass

Ако не искате да използвате свойството Data на TTreeNode, а по-скоро бихте искали да имате своя собствена TreeNode с няколко свойства, Delphi също има решение.

Кажете, че искате да можете да правите

Ето как да разширите стандартния TTreeNode с няколко собствени свойства:

  1. Създайте своя TMyTreeNode чрез разширяване на TTreeNode.
  2. Добавете го низово свойство MyProperty.
  3. Работете с OnCreateNodeClass за изглед на дърво, за да определите вашия клас възли трябва да бъде създаден.
  4. Разкрийте нещо като свойство TreeView1_SelectedNode на ниво формуляр. Това ще бъде от типа TMyTreeNode.
  5. Обработвайте OnChange на изглед на дърво, за да запишете в SelectedNode стойността на избрания възел.
  6. Използвайте TreeView1_Selected.myProperty, за да четете или пишете нова персонализирана стойност.

Ето пълния изходен код (TButton: "Button1" и TTreeView: "TreeView1" на формуляр):

Този път свойството Data от клас TTreeNode не се използва. По-скоро разширявате класа TTreeNode, за да имате своя собствена версия на дървесен възел: TMyTreeNode.

Използвайки събитието OnCreateNodeClass на изгледа на дърво, вие създавате възел от вашия персонализиран клас вместо стандартния клас TTreenode.