TreeView由節(jié)點(diǎn)構(gòu)成,建樹通過(guò)對(duì)TreeView.items屬性進(jìn)行操作。Items是一個(gè)TTreeNodes對(duì)象,這是一個(gè)TTreeNode集。通過(guò)它能夠方便地管理和顯示具有層次結(jié)構(gòu)的信息,是Windows應(yīng)用程序的基本控件之一。DELPHI雖然具有比較強(qiáng)大的文件管理功能,提供了多個(gè)用于文件管理的標(biāo)準(zhǔn)控件,如DriveComboBox、DirectoryListBox、FileListBox等,通過(guò)設(shè)置它們的屬性,使其建立起聯(lián)系,甚至不用編寫一行程序,我們就可以實(shí)現(xiàn)在不同的目錄之間進(jìn)行切換,然而這樣的目錄切換只適用于進(jìn)行文件的查找定位,而不能方便地進(jìn)行目錄的瀏覽,例如我們要從c:\windows目錄轉(zhuǎn)到c:\program files目錄,就必須返回到根目錄才能進(jìn)行切換,而不能象Windows資源管理器那樣任意地在不同的目錄之間進(jìn)行瀏覽與切換。
Delphi TreeView怎么用
Delphi TreeView使用方法
一、針對(duì)TTreeNodes,也就是 TreeView.Items,有這些屬性:
1、count,節(jié)點(diǎn)個(gè)數(shù)。
2、item[index] ,通過(guò)index得到節(jié)點(diǎn)。
二、針對(duì)TTreeNodes,也就是 TreeView.Items,常用的添加節(jié)點(diǎn)的操作有:
AddFirst添加第一個(gè)根節(jié)點(diǎn)。由此函數(shù)添加的節(jié)點(diǎn)總排在前面,除非后來(lái)又使用此函數(shù)添加了一個(gè)節(jié)點(diǎn),則后添加的節(jié)點(diǎn)將排在前面。該函數(shù)返回新添加的節(jié)點(diǎn)。
AddChildFirst添加第一個(gè)子節(jié)點(diǎn),要求有父節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。
AddChild添加一個(gè)子節(jié)點(diǎn),要求有父節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。
Add添加一個(gè)兄弟節(jié)點(diǎn),要求有兄弟節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。
三、針對(duì)TTreeNodes,也就是 TreeView.Items,常用的得到節(jié)點(diǎn)的操作有:
GetFirstNode() 得到根節(jié)點(diǎn)。然后配合TTreeNode.GetNext(),就可以訪問(wèn)所有的節(jié)點(diǎn)。
四、建樹舉例:
var
root_node,cur_node:TTreeNode;
begin
root_node:=AddFirst(nil,根節(jié)點(diǎn)1);
cur_node:=addChildfirst(root_node,nil,根節(jié)點(diǎn)1_child1);
add(cur_node,根節(jié)點(diǎn)1_child2);
root_node:=Add(nil,根節(jié)點(diǎn)2);
AddChildFirst(root_node,根節(jié)點(diǎn)2_child1);
end;
五、事件觸發(fā):
當(dāng)從一個(gè)節(jié)點(diǎn)跳到另一個(gè)節(jié)點(diǎn),會(huì)觸發(fā)TTreeView.OnChange事件。該事件中,將傳遞node,即當(dāng)前被選中的節(jié)點(diǎn)。
當(dāng)修改一個(gè)節(jié)點(diǎn)的text時(shí),會(huì)觸發(fā)TTreeView.onEdit事件。
六、將節(jié)點(diǎn)和節(jié)點(diǎn)所對(duì)應(yīng)的數(shù)據(jù)聯(lián)系起來(lái)
對(duì)于每個(gè)TTreeNode,有個(gè)Data屬性,可以存放一個(gè)指針。我們可以利用這個(gè)域來(lái)存放與節(jié)點(diǎn)對(duì)應(yīng)的自己的數(shù)據(jù)。
1.我們先定義一個(gè)數(shù)據(jù)結(jié)構(gòu),作為記錄我們要記錄的數(shù)據(jù)。如:
type PMyData=^TMyData;
TMyData=Record
sFName:string;
sLName:String;
nIndex:integer;
end;
2.然后,創(chuàng)建數(shù)時(shí),將節(jié)點(diǎn)和節(jié)點(diǎn)數(shù)據(jù)聯(lián)系起來(lái):
procedure TForm1.Button1Click(Sender: TObject);
var
myshuju: PMyData
cur_node:TTreeNode;
begin
New(myshuju); //記住,一定要先分配內(nèi)存。有幾個(gè)節(jié)點(diǎn),就要分配幾次內(nèi)存。
myshuju^.FName:=Edit1.Text;
Myshuju^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
cur_node:=items.AddFirst(nil,first);
cur_node.data:=myshuju;
end;
end;
3.當(dāng)我們選中一個(gè)節(jié)點(diǎn)時(shí),就可以使用我們的數(shù)據(jù)了。
procedure TForm1.TreeView1Change(Sender:TObject;Node:TTreeNode);
begin
if node.data<>nil then
self.label1.caption:=pmyData(node.data)^.Fname+pmyData(node.data)^.Lname
end;
4.內(nèi)存釋放
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
Dispose(Item.Data);
end;
七、一般使用流程:
1、添加全局變量:
b_first:boolean; //記錄是否是第一次訪問(wèn)節(jié)點(diǎn),因?yàn)榇藭r(shí)數(shù)據(jù)還未準(zhǔn)備好,而一旦訪問(wèn)節(jié)點(diǎn)就會(huì)觸發(fā)OnChange事件,在此事件處理函數(shù)中也許會(huì)出錯(cuò)。
2、在FormCreate中,
a、設(shè)置b_first:=true;
b. 創(chuàng)建數(shù)并將節(jié)點(diǎn)與數(shù)據(jù)聯(lián)系。
3、在FormShow中設(shè)置b_first:=false;
4.在事件OnChange中處理節(jié)點(diǎn)被選中事件。
5.在Edit中處理節(jié)點(diǎn)被修改Text事件。并調(diào)用OnChange.
6.在 TreeView.Destory中 釋放Data 中指向的內(nèi)存空間。
- PC官方版
- delphi7(Borland Delphi 7 企業(yè)版)7.0 Build 8.1 中文注冊(cè)安裝版(附序列號(hào)) delphi2009(RAD Studio 2009)12.0.3170.16989 破解安裝完美版 delphi2007(RAD Studio 2007)11.0.2902.10471 官方版+破解補(bǔ)丁 Borland Delphi 8.0 光盤版(單純的for .NET版本) 牛津書蟲英漢對(duì)照電子書(38本合一)免費(fèi)下載 delphi 2007 for phpV2.0英文特別版
- 安卓官方手機(jī)版
- Delphi組件開發(fā)者指南( Delphi組件編寫者指南)pdf格式(中文版/帶書簽)
- IOS官方手機(jī)版