您當(dāng)前的位置:首頁(yè) > 仿真假山與仿真樹(shù) > 仿真假山與仿真樹(shù)作用
TTreeView Delphi組件顯示項(xiàng)目的分層列表- 樹(shù)節(jié)點(diǎn)。節(jié)點(diǎn)由節(jié)點(diǎn)文本和可選圖像表示。樹(shù)視圖中的每個(gè)節(jié)點(diǎn)都是TTreeNode類(lèi)的實(shí)例。
雖然您可以在設(shè)計(jì)時(shí)使用TreeView Items Editor在樹(shù)形視圖中填充項(xiàng)目,但在大多數(shù)情況下,您將在運(yùn)行時(shí)填充樹(shù)形視圖-取決于應(yīng)用程序的用途。
TreeView Items Editor顯示只有少量信息可以“附加”到節(jié)點(diǎn):文本和一些圖像索引(對(duì)于正常狀態(tài),展開(kāi),選定等)。
本質(zhì)上,樹(shù)視圖組件易于編程。有兩種方法可以將新節(jié)點(diǎn)添加到樹(shù)中并設(shè)置其層次結(jié)構(gòu)。
這是將10個(gè)節(jié)點(diǎn)添加到樹(shù)視圖(名為“ TreeView1”)的方法。請(qǐng)注意,Items屬性提供對(duì)樹(shù)中所有節(jié)點(diǎn)的訪問(wèn)。AddChild將新節(jié)點(diǎn)添加到樹(shù)視圖。個(gè)參數(shù)是父節(jié)點(diǎn)(用于構(gòu)建層次結(jié)構(gòu)),第二個(gè)參數(shù)是節(jié)點(diǎn)文本。
古樸大氣仿真古樹(shù)北京于網(wǎng)絡(luò)摘錄此圖,若有不妥請(qǐng)通知我們
AddChild返回新添加的TTreeNode。在以上代碼示例中,所有10個(gè)節(jié)點(diǎn)都被添加為根節(jié)點(diǎn)(沒(méi)有父節(jié)點(diǎn))。
在任何復(fù)雜的情況下,您都希望節(jié)點(diǎn)攜帶多信息-好具有一些特定于您正在開(kāi)發(fā)的項(xiàng)目的特殊值(屬性)。
假設(shè)您要顯示數(shù)據(jù)庫(kù)中的客戶(hù)訂單項(xiàng)目數(shù)據(jù)。每個(gè)客戶(hù)可以擁有多訂單,每個(gè)訂單由多項(xiàng)目組成。這是一個(gè)可以在樹(shù)視圖中顯示的層次關(guān)系:
在您的數(shù)據(jù)庫(kù)中,每個(gè)訂單和每個(gè)項(xiàng)目都會(huì)有多信息。樹(shù)狀視圖顯示(只讀)當(dāng)前狀態(tài)-您想查看所選訂單的每個(gè)訂單(甚至每個(gè)項(xiàng)目)詳細(xì)信息。
當(dāng)用戶(hù)選擇節(jié)點(diǎn)“ Order_1_1”時(shí),您希望向用戶(hù)顯示訂單詳細(xì)信息(總計(jì),日期等)。
那時(shí),您可以從數(shù)據(jù)庫(kù)中獲取所需的數(shù)據(jù),但是您需要知道所選順序的標(biāo)識(shí)符(比如說(shuō)整數(shù)值)才能獲取正確的數(shù)據(jù)。
古樸大氣仿真古樹(shù)北京于網(wǎng)絡(luò)摘錄此圖,若有不妥請(qǐng)通知我們
我們需要一種方法來(lái)將該訂單標(biāo)識(shí)符與節(jié)點(diǎn)一起存儲(chǔ),但是我們不能使用Text屬性。我們需要存儲(chǔ)在每個(gè)節(jié)點(diǎn)中的自定義值是一個(gè)整數(shù)(僅作為示例)。
當(dāng)發(fā)生這種情況時(shí),您可能會(huì)傾向于尋找Tag屬性(許多Delphi組件都具有),但是TTreeNode類(lèi)未公開(kāi)Tag屬性。
將自定義數(shù)據(jù)添加到樹(shù)節(jié)點(diǎn):TreeNode.Data屬性
樹(shù)節(jié)點(diǎn)的Data屬性允許您將自定義數(shù)據(jù)與樹(shù)節(jié)點(diǎn)相關(guān)聯(lián)。數(shù)據(jù)是一個(gè)指針,可以指向?qū)ο蠛陀涗?。在TreeView中顯示XML(RSS提要)數(shù)據(jù)顯示了如何將記錄類(lèi)型變量存儲(chǔ)到樹(shù)節(jié)點(diǎn)的Data屬性中。
許多項(xiàng)目類(lèi)型的類(lèi)都公開(kāi)了Data屬性-您可以將其與項(xiàng)目一起存儲(chǔ)。一個(gè)示例是TListView組件的TListItem。這是將對(duì)象添加到Data屬性的方法。
將自定義數(shù)據(jù)添加到樹(shù)節(jié)點(diǎn):TreeView.CreateNodeClass
如果您不想使用TTreeNode的Data屬性,而是想用幾個(gè)屬性擴(kuò)展自己的TreeNode,Delphi也提供了一個(gè)解決方案。
古樸大氣仿真古樹(shù)北京于網(wǎng)絡(luò)摘錄此圖,若有不妥請(qǐng)通知我們
說(shuō)你想做
以下是使用您自己的一些屬性擴(kuò)展標(biāo)準(zhǔn)TTreeNode的方法:
1、通過(guò)擴(kuò)展TTreeNode創(chuàng)建TMyTreeNode。
2、添加一個(gè)字符串屬性MyProperty。
3、處理樹(shù)視圖的OnCreateNodeClass以指定應(yīng)創(chuàng)建的節(jié)點(diǎn)類(lèi)。
4、在窗體級(jí)別上公開(kāi)類(lèi)似TreeView1_SelectedNode屬性的內(nèi)容。這將是TMyTreeNode類(lèi)型。
5、處理樹(shù)視圖的OnChange,將所選節(jié)點(diǎn)的值寫(xiě)入到SelectedNode中。
6、使用TreeView1_Selected.myProperty讀取或?qū)懭胄碌淖远x值。
這是完整的源代碼(窗體上的TButton:“ Button1”和TTreeView:“ TreeView1”):
這次不使用TTreeNode類(lèi)的Data屬性。而是,將TTreeNode類(lèi)擴(kuò)展為具有自己的樹(shù)節(jié)點(diǎn)版本:TMyTreeNode。
使用樹(shù)視圖的OnCreateNodeClass事件,您可以創(chuàng)建自定義類(lèi)的節(jié)點(diǎn),而不是標(biāo)準(zhǔn)TTreenode類(lèi)。