TreeView使用筆記
2024-07-21 02:29:53
供稿:網友
treeview由節點構成,建樹通過對treeview.items屬性進行操作。items是一個ttreenodes對象,這是一個ttreenode集。
一、針對ttreenodes,也就是 treeview.items,有這些屬性:
1、count,節點個數。
2、item[index] ,通過index得到節點。
二、針對ttreenodes,也就是 treeview.items,常用的添加節點的操作有:
addfirst添加第一個根節點。由此函數添加的節點總排在前面,除非后來又使用此函數添加了一個節點,則后添加的節點將排在前面。該函數返回新添加的節點。
addchildfirst添加第一個子節點,要求有父節點作為其參數。返回新添加的節點。
addchild添加一個子節點,要求有父節點作為其參數。返回新添加的節點。
add添加一個兄弟節點,要求有兄弟節點作為其參數。返回新添加的節點。
三、針對ttreenodes,也就是 treeview.items,常用的得到節點的操作有:
getfirstnode() 得到根節點。
然后配合ttreenode.getnext(),就可以訪問所有的節點。
四、建樹舉例:
var
root_node,cur_node:ttreenode;
begin
root_node:=addfirst(nil,'根節點1');
cur_node:=addchildfirst(root_node,nil,'根節點1_child1');
add(cur_node,'根節點1_child2');
root_node:=add(nil,'根節點2');
addchildfirst(root_node,''根節點2_child1');
end;
五、事件觸發:
當從一個節點跳到另一個節點,會觸發ttreeview.onchange事件。該事件中,將傳遞node,即當前被選中的節點。
當修改一個節點的text時,會觸發ttreeview.onedit事件。
六、將節點和節點所對應的數據聯系起來
對于每個ttreenode,有個data屬性,可以存放一個指針。我們可以利用這個域來存放與節點對應的自己的數據。
1.我們先定義一個數據結構,作為記錄我們要記錄的數據。如:
type
pmydata=^tmydata;
tmydata=record
sfname:string;
slname:string;
nindex:integer;
end;
2.然后,創建數時,將節點和節點數據聯系起來:
procedure tform1.button1click(sender: tobject);
var
myshuju: pmydata
cur_node:ttreenode;
begin
new(myrecptr); //記住,一定要先分配內存。有幾個節點,就要分配幾次內存。
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.當我們選中一個節點時,就可以使用我們的數據了。
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; //記錄是否是第一次訪問節點,因為此時數據還未準備好,而一旦訪問節點就會觸發onchange事件,在此事件處理函數中也許會出錯。
2、在formcreate中,
a、設置b_first:=true;
b. 創建數并將節點與數據聯系。
3、在formshow中
設置b_first:=false;
4.在事件onchange中處理節點被選中事件。
5.在edit中處理節點被修改text事件。
并調用onchange.
6.在 treeview.destory中
釋放data 中指向的內存空間。本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。