国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

TreeView使用筆記

2019-11-18 19:51:11
字體:
供稿:網(wǎng)友

TreeView使用筆記


TreeView由節(jié)點構(gòu)成,建樹通過對TreeView.items屬性進(jìn)行操作。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ā):

當(dāng)從一個節(jié)點跳到另一個節(jié)點,會觸發(fā)TTreeView.OnChange事件。該事件中,將傳遞node,即當(dāng)前被選中的節(jié)點。


當(dāng)修改一個節(jié)點的text時,會觸發(fā)TTreeView.onEdit事件。

 

六、將節(jié)點和節(jié)點所對應(yīng)的數(shù)據(jù)聯(lián)系起來

對于每個TTreeNode,有個Data屬性,可以存放一個指針。我們可以利用這個域來存放與節(jié)點對應(yīng)的自己的數(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.當(dāng)我們選中一個節(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ù)還未準(zhǔn)備好,而一旦訪問節(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)存空間。

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 页游| 芮城县| 兴山县| 曲周县| 南开区| 梧州市| 增城市| 美姑县| 安宁市| 获嘉县| 赤水市| 普洱| 墨江| 连南| 建宁县| 汝城县| 阜康市| 峡江县| 称多县| 巫溪县| 上饶县| 汤原县| 专栏| 九寨沟县| 崇左市| 扬中市| 玉树县| 赤峰市| 鹰潭市| 忻城县| 永新县| 沾化县| 德格县| 大姚县| 从化市| 榆林市| 河源市| 邵武市| 湘阴县| 昌吉市| 依安县|