Tároljon több egyedi adatot a fa csomópontjában Delphiben

A TTreeView Delphi Az összetevő megjeleníti az elemek hierarchikus listáját - fa csomópontok. A csomópontot csomópont szövege és opcionális kép mutatja be. A fa nézetben minden csomópont egy TTreeNode osztály példánya.

Bár a fa nézetet kitöltheti elemekkel a tervezési időpontban, a TreeView elemek szerkesztője, a legtöbb esetben a fa nézetet töltse ki futási időben - attól függően, hogy mi az alkalmazás.

A TreeView elemek szerkesztője kideríti, hogy csak egy maroknyi információ van, amelyet "csatolhat" egy csomóponthoz: szöveg és néhány képindex (a normál állapothoz kibővített, kiválasztott és hasonló).

Lényegében a fa nézet összetevőt könnyű programozni. Van néhány módszer az új csomópontok hozzáadásához a fához és a hierarchiájuk beállításához.

Így adhat hozzá 10 csomópontot a fa nézethez ("TreeView1" néven). Vegye figyelembe, hogy az Elemek tulajdonság hozzáférést biztosít a fa összes csomópontjához. Az AddChild új csomópontot ad hozzá a fa nézethez. Az első paraméter a szülő csomópont (a hierarchia felépítéséhez), a második paraméter a csomópont szövege.

instagram viewer

Az AddChild az újonnan hozzáadott TTreeNode-t adja vissza. A fentiekben kódminta, mind a 10 csomópont gyökér csomópontként kerül hozzáadásra (nincs szülő csomópont).

Bármilyen bonyolultabb helyzetben azt szeretné, ha a csomópontok több információt hordoznának - lehetőleg olyan speciális értékekkel (tulajdonságokkal) rendelkezzenek, amelyek a kidolgozott projektre jellemzőek.

Tegyük fel, hogy meg szeretné jeleníteni az ügyfél-megrendelési cikkek adatait az adatbázisból. Minden ügyfélnek több megrendelése lehet, és minden megrendelés több tételből áll. Ez egy hierarchikus kapcsolat, amelyet egy fa nézetben lehet megjeleníteni:

Az adatbázisában minden rendelésre és elemre vonatkozóan lenne több információ. A fa nézet megjeleníti a (csak olvasható) aktuális állapotot - és meg akarja látni a megrendelés (vagy akár elem) részleteit a kiválasztott rendelésnél.

Amikor a felhasználó kiválasztja a "Megrendelés_1_1" csomópontot, akkor azt szeretné, hogy a megrendelés részletei (teljes összeg, dátum stb.) Megjelenjenek a felhasználó számára.

Abban az időben le tudja vonni a szükséges adatokat az adatbázisból, de a helyes adatok megragadásához tudnia kell a kiválasztott rendelés egyedi azonosítóját (mondjuk egész számot).

Szükségünk van arra, hogy ezt a rendelési azonosítót a csomóponttal együtt tároljuk, de a Szöveg tulajdonságot nem használhatjuk. Az egyéni érték, amelyet minden csomópontban tárolni kell, egy egész szám (csak egy példa).

Amikor ilyen helyzet fordul elő, akkor kísértés lehet, hogy megkeresi a Tag tulajdonságot (sok Delphi összetevő rendelkezik), de a Tag tulajdonságot a TTreeNode osztály nem teszi ki.

Egyéni adatok hozzáadása a fa csomópontokhoz: A TreeNode. Adattulajdon

A facsomópont Data tulajdonsága lehetővé teszi az egyéni adatok társítását a fa csomóponttal. Az adatok a mutató és mutathat objektumokra és rekordokra. Az XML (RSS feed) adatok megjelenítése a TreeView-ban megmutatja, hogyan kell tárolni rekord típusa változó a fa csomópont Data tulajdonságába.

Számos elemtípus-osztály teszi ki az Adat tulajdonságot - bármilyen objektumot tárolhat az elem mellett. Példa erre a TListView összetevő TListItem. Íme hogyan adhat objektumokat az Data tulajdonsághoz.

Egyéni adatok hozzáadása a fa csomópontokhoz: A TreeView. CreateNodeClass

Ha nem akarja használni a TTreeNode Data tulajdonságát, hanem inkább szeretné, ha saját TreeNode-ját néhány tulajdonsággal kibővíti, akkor a Delphi megoldást is kínál.

Mondja, hogy képes lesz rá

A következő módon bővítheti a standard TTreeNode-t néhány saját tulajdonsággal:

  1. Hozza létre a TMyTreeNode elemet a TTreeNode kiterjesztésével.
  2. Adja hozzá a MyProperty karakterlánc tulajdonságot.
  3. Kezelje az OnCreateNodeClass fa nézetét annak meghatározásához, hogy létre kell hozni a csomópont osztályt.
  4. Tegye ki valami hasonlót a TreeView1_SelectedNode tulajdonsághoz az űrlap szintjén. Ez a TMyTreeNode típusú lenne.
  5. Kezelje a fa nézet OnChange elemét, hogy a SelectedNode-ba írja a kiválasztott csomópont értékét.
  6. Használja a TreeView1_Selected.myProperty fájlt az új egyedi érték elolvasásához vagy írásához.

Itt van a teljes forráskód (TButton: "Button1" és TTreeView: "TreeView1" egy űrlapon):

Ezúttal a TTreeNode osztály Data tulajdonsága nem kerül felhasználásra. Inkább kibővíti a TTreeNode osztályt, hogy rendelkezzen egy fa csomópont saját verziójával: TMyTreeNode.

A fa nézet OnCreateNodeClass eseményével létrehozza az egyéni osztály csomópontját a szokásos TTreenode osztály helyett.

instagram story viewer