【溫故Delphi】之TreeView


  TreeView是Delphi中使用頻率比較高的一個控件,雖然使用次數很多,但總結不夠。借着這次做GDW原型的機會總結一下,寫的過程中也會參考網上的博文。

TTreeView、TTreeNodes和TTreeNode

  TTreeView由節點構成,建樹通過對TreeView.items屬性進行操作。Items是一個TTreeNodes對象,這是一個TTreeNode集。

常用的屬性

  1. Count,結點個數;
  2. Item[index],通過index得到結點;
  3. TTreeNode.Data,指向一個指針,可以存對象,存指針,也可以存整數;
  4. TTreeNode.Text,樹結點的文本;
  5. TTreeNode.ImageIndex,TTreeNode.SelectedIndex,分別是樹結點圖標序號,樹結點選中時圖標序號,用於設置樹結點的圖標;
  6. TTreeNode.Expanded屬性表明是否所有的子項都全部展開;
  7. TTreeNode.HasChildren屬性表明一個項是否有子項;
  8. TTreeNode.Focused屬性確定焦點是否落在此節點上,被Focus時會一個標准的方框圍住,只能有一個節點會被聚焦。 
  9. TTreeNode.Selected屬性表明一個節點是否被選中,同樣只有一個節點會被選中。

常用的方法

  1. GetFirstNode 得到根結點;
  2. TTreeNode.GetNext 得到本節點的下一個結點,配合GetFirstNode可以遍歷整個樹;
  3. AddFirst 添加第一個根節點,此函數添加的節點總排在前面,除非后來又使用此函數添加了一個節點,則后添加的節點將排在前面。返回新添加的節點。
  4. AddChild添加一個子節點,要求有父節點作為其參數。返回新添加的節點。
  5. Add添加一個兄弟節點,要求有兄弟節點作為其參數。返回新添加的節點。
  6. TTreeNode的一些結點關系方法:GetFirstChild, GetLastChild, GetPrevChild, and GetNextChild分別返回當前項子項的第一個、最后一個和前一個、后一個項。GetNextSiblingGetPrevSibling則返回在同一Level下的下一個和上一個項。

常用的事件

  1. 當從一個節點跳到另一個節點,會觸發TTreeView.OnChange事件。該事件中,將傳遞node,即當前被選中的節點。
  2. 當修改一個節點的text時,會觸發TTreeView.OnEdit事件。

TreeView的常見使用方法

添加、刪除和編輯樹結點

  1. 用AddFirst, AddFirstChild, AddChild等先添加根節點,如Treeview.Items.AddFirst( nil, 'Root');然后以此為基礎,添加此項的子節點。
  2. 刪除節點:Treeview.Selected.Delete
  3. 編輯節點內容:Treeview.Selected.EditText
  4. 為了提升效率,避免界面大幅閃動,最好使用TreeView.Items.BeginUpdate 和 TreeView.Items.EndUpdate 方法;

設置樹結點圖標

  1. ImageIndex:在常態時選用的圖的序號;
  2. SelectedIndex:當節點被選中時在TimageList 中選什么樣的圖象;

一段代碼 

 1   Items.BeginUpdate;
 2   Items.Clear;
 3   // 建立第一層節點
 4   AddElemntType2Tree(AElementTypeID, AAddNoChildNode);
 5   // 建立第二層節點
 6   if Items.GetFirstNode <> nil then
 7   begin    
 8     oNode := Items[0]; // 選擇第一個構件類型結點
 9     while oNode <> nil do
10     begin
11       UpdateTreeNode(oNode, ASelectedElementID);
12       oNode := oNode.getNextSibling;
13     end;
14   end;
15   // 展開
16   if Selected <> nil then
17     Selected.Expanded := True
18   else if Items.Count > 0 then
19   begin
20     oNode := Items.GetFirstNode;
21     Assert(oNode <> nil);
22     // 選中第一個節點的第一個子節點(若存在則為第一個構件類型下的第一個構件)。
23     Selected := oNode.getFirstChild();
24     // 若沒有選中構件,則選中第一個構件類型節點,否則展開節點。
25     if Selected = nil then
26       Selected := oNode
27     else
28       Selected.Expanded := True;
29   end;
30   Items.EndUpdate;

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM