程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> TreeView使用筆記

TreeView使用筆記

編輯:Delphi

  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 中指向的內存空間。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved