TreeView使用筆記
發(fā)表時間:2024-06-12 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]TreeView使用筆記 TreeView由節(jié)點構(gòu)成,建樹通過對TreeView.items屬性進行操作。Items是一個TTreeNodes對象,這是一個TTreeNode集。 一、針對TTreeNodes,也就是 TreeView.Items,有這些屬性: 1、count,節(jié)點個數(shù)。 2、it...
TreeView使用筆記
TreeView由節(jié)點構(gòu)成,建樹通過對TreeView.items屬性進行操作。Items是一個TTreeNodes對象,這是一個TTreeNode集。
一、針對TTreeNodes,也就是 TreeView.Items,有這些屬性:
1、count,節(jié)點個數(shù)。
2、item[index] ,通過index得到節(jié)點。
二、針對TTreeNodes,也就是 TreeView.Items,常用的添加節(jié)點的操作有:
AddFirst添加第一個根節(jié)點。由此函數(shù)添加的節(jié)點總排在前面,除非后來又使用此函數(shù)添加了一個節(jié)點,則后添加的節(jié)點將排在前面。該函數(shù)返回新添加的節(jié)點。
AddChildFirst添加第一個子節(jié)點,要求有父節(jié)點作為其參數(shù)。返回新添加的節(jié)點。
AddChild添加一個子節(jié)點,要求有父節(jié)點作為其參數(shù)。返回新添加的節(jié)點。
Add添加一個兄弟節(jié)點,要求有兄弟節(jié)點作為其參數(shù)。返回新添加的節(jié)點。
三、針對TTreeNodes,也就是 TreeView.Items,常用的得到節(jié)點的操作有:
GetFirstNode() 得到根節(jié)點。
然后配合TTreeNode.GetNext(),就可以訪問所有的節(jié)點。
四、建樹舉例:
var
root_node,cur_node:TTreeNode;
begin
root_node:=AddFirst(nil,'根節(jié)點1');
cur_node:=addChildfirst(root_node,nil,'根節(jié)點1_child1');
add(cur_node,'根節(jié)點1_child2');
root_node:=Add(nil,'根節(jié)點2');
AddChildFirst(root_node,''根節(jié)點2_child1');
end;
五、事件觸發(fā):
當從一個節(jié)點跳到另一個節(jié)點,會觸發(fā)TTreeView.OnChange事件。該事件中,將傳遞node,即當前被選中的節(jié)點。
當修改一個節(jié)點的text時,會觸發(fā)TTreeView.onEdit事件。
六、將節(jié)點和節(jié)點所對應的數(shù)據(jù)聯(lián)系起來
對于每個TTreeNode,有個Data屬性,可以存放一個指針。我們可以利用這個域來存放與節(jié)點對應的自己的數(shù)據(jù)。
1.我們先定義一個數(shù)據(jù)結(jié)構(gòu),作為記錄我們要記錄的數(shù)據(jù)。如:
type
PMyData=^TMyData;
TMyData=Record
sFName:string;
sLName:String;
nIndex:integer;
end;
2.然后,創(chuàng)建數(shù)時,將節(jié)點和節(jié)點數(shù)據(jù)聯(lián)系起來:
procedure TForm1.Button1Click(Sender: TObject);
var
myshuju: PMyData
cur_node:TTreeNode;
begin
New(MyRecPtr); //記住,一定要先分配內(nèi)存。有幾個節(jié)點,就要分配幾次內(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.當我們選中一個節(jié)點時,就可以使用我們的數(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;
七、一般使用流程:
1、添加全局變量:
b_first:boolean; //記錄是否是第一次訪問節(jié)點,因為此時數(shù)據(jù)還未準備好,而一旦訪問節(jié)點就會觸發(fā)OnChange事件,在此事件處理函數(shù)中也許會出錯。
2、在FormCreate中,
a、設(shè)置b_first:=true;
b. 創(chuàng)建數(shù)并將節(jié)點與數(shù)據(jù)聯(lián)系。
3、在FormShow中
設(shè)置b_first:=false;
4.在事件OnChange中處理節(jié)點被選中事件。
5.在Edit中處理節(jié)點被修改Text事件。
并調(diào)用OnChange.
6.在 TreeView.Destory中
釋放Data 中指向的內(nèi)存空間。