Stocați mai multe date personalizate în nodul copac al unei vizualizări în copac

Componenta TTreeView Delphi afișează o listă ierarhică de elemente-noduri de arbore. Un nod este prezentat prin textul nodului și o imagine opțională. Fiecare nod dintr-o vizualizare în arbore este o instanță a unei clase TTreeNode.

În timp ce puteți completa vizualizarea arborelui cu elemente la momentul proiectării, utilizând Editorul de elemente TreeView, în cele mai multe cazuri, completați vizualizarea arborelui dvs. în timp de funcționare, în funcție de ce este aplicația dvs..

Editorul de elemente TreeView dezvăluie că există doar o serie de informații pe care le puteți „atașa” unui nod: text și câțiva indici de imagine (pentru starea normală, extinsă, selectată și similar).

În esență, componenta de vizualizare arbore este ușor de programat. Există câteva metode pentru a adăuga noi noduri în arbore și a stabili ierarhia lor.

Iată cum puteți adăuga 10 noduri la vizualizarea arborelui (numit „TreeView1”). Rețineți că proprietatea Elemente oferă acces la toate nodurile din arbore. AddChild adaugă un nou nod la vizualizarea arborelui. Primul parametru este nodul părinte (pentru a construi ierarhia) și al doilea parametru este textul nodului.

AddChild returnează noul TTreeNode adăugat. În eșantionul de cod de mai sus, toate cele 10 noduri sunt adăugate ca noduri rădăcină (nu au nod părinte).

În orice situații mai complexe, doriți ca nodurile dvs. să poarte mai multe informații - de preferință să aibă anumite valori speciale (proprietăți) specifice proiectului pe care îl dezvoltați.

Spuneți că doriți să afișați date despre articolele din comanda dvs. din baza de date. Fiecare client poate avea mai multe comenzi și fiecare comandă este alcătuită din mai multe articole. Aceasta este o relație ierarhică pe care o puteți afișa într-o vizualizare în arbore:

În baza de date, ar exista mai multe informații pentru fiecare comandă și pentru fiecare articol. Afișarea în arbore afișează starea curentă (numai de citire) - și doriți să vedeți pe comandă (sau chiar pe articol) detalii pentru comanda selectată.

Când utilizatorul selectează nodul "Comanda_1_1" doriți ca detaliile comenzii (suma totală, data etc.) să fie afișate utilizatorului.

Puteți, în acel moment, să obțineți datele necesare din baza de date, DAR ar trebui să cunoașteți identificatorul unic (să zicem o valoare întreagă) a ordinului selectat pentru a prelua datele corecte.

Avem nevoie de o modalitate de a stoca acest identificator de comandă împreună cu nodul, dar nu putem folosi proprietatea Text. Valoarea personalizată pe care trebuie să o stocăm în fiecare nod este un număr întreg (doar un exemplu).

Când se întâmplă o astfel de situație, puteți fi tentat să căutați proprietatea Tag (multe componente Delphi au), dar proprietatea Tag nu este expusă de clasa TTreeNode.

Adăugați date personalizate în nodurile Tree: Proprietatea TreeNode.Data

Proprietatea Data a unui nod arbore vă permite să asociați datele dvs. personalizate cu un nod de copac. Datele sunt indicatoare și pot indica obiecte și înregistrări. Afișarea datelor XML (RSS Feed) într-un TreeView arată cum să stocați o variabilă de tip înregistrare în proprietatea Date a unui nod arbore.

Multe clase de tip de element expun proprietatea Date - pe care le puteți utiliza pentru a stoca orice obiect împreună cu elementul. Un exemplu este TListItem al unei componente TListView. Iată cum puteți adăuga obiecte la proprietatea Data.

Adăugați date personalizate în nodurile arborelui: TreeView.CreateNodeClass

Dacă nu doriți să utilizați proprietatea Data a TTreeNode, ci mai degrabă doriți să aveți propriul TreeNode extins cu câteva proprietăți, Delphi are și o soluție.

Spune că vrei să poți face

Iată cum puteți extinde standardul TTreeNode cu câteva proprietăți proprii:

  1. Creați-vă TMyTreeNode extinzând TTreeNode.
  2. Adăugați-o o proprietate string MyProperty.
  3. Manevrați OnCreateNodeClass pentru vizualizarea în arbore pentru a specifica clasa dvs. de nod ar trebui creată.
  4. Expuneti ceva de genul proprietatii TreeView1_SelectedNode la nivel de formular. Acesta ar fi de tipul TMyTreeNode.
  5. Gestionează OnChange vizualizarea arborelui pentru a scrie pe Nodul selectat valoarea nodului selectat.
  6. Utilizați TreeView1_Selected.myProperty pentru a citi sau scrie o nouă valoare personalizată.

Iată codul sursă complet (TButton: "Button1" și TTreeView: "TreeView1" pe un formular):

De data aceasta nu este utilizată proprietatea Data din clasa TTreeNode. Mai degrabă, extindeți clasa TTreeNode pentru a avea propria versiune a unui nod de arbore: TMyTreeNode.

Folosind evenimentul OnCreateNodeClass al vizualizării în arbore, creați un nod al clasei dvs. personalizate în loc de clasa standard TTreenode.