Delphi Treeview 用法(概念、屬性、添加編輯插入節點、定位節點、拖拽等)


今天再細研究了一下Treeview的用法,網上雖然總結了很多,但是還是有很多節點沒有講到了,也給使用中遇到很多問題。特地總結一下:

 

1、概念

Treeview用於顯示按照樹形結構進行組織的數據。Treeview控件中一個樹形圖由節點(TreeNode)和連接線組成。TtreeNode是TTreeview的基本組成單元。 一個樹的節點又包含文本(Text)和數據(Data)。Text為String類,Data則為無定形指針(Untyped   Pointer),可以指向一個與節點相聯系的數據結構。每一個節點下子節點形成這一節點的Items屬性,當前節點有一個唯一的Index(TreeNode的Index屬性),用於說明子節點在Items中的位置,每一個節點下的子節點是順序編號的,第一個是0,第二個是1,依次類推。用IndexOf方法獲得子節點的順序,絕對順序(AbsoluteIndex)則是指從Treeview第一個項開始的順序值,第一個是0,如此推下去。Item屬性則根據Index的值返回當前節點的第Index個子節點。Count則表明屬於此項的所有子節點的數量。用MoveTo方法將Item由一個位置移到另一個位置。   
 
2、屬性   
 Expanded屬性表明是否所有的子項都全部展開(包括子項的子項),為True表示全部展開。   
 IsVisible屬性表明一個項是否在樹中能被看到,如果樹全部展開那么這個Item是肯定可以   被看到。    
 HasChildren屬性表明一個項是否有子項。GetFirstChild, GetLastChild, GetPrevChild, GetNextChild分別返回當前項子項的第一個、最后一個和前一個、后一個項。   
 GetNextSibling   and   GetPrevSibling則返回在同一Level下的下一個和上一個項。   
 GetNextVisible   and   GetPrevVisible則返回能看得到的下一個和上一個項。如果一個節點   有Parent,則HasAsParent方法返回True.   Parent為當前項的父項。Focused屬性確定焦點是否落在此節點上,被Focus時會一個標准的方框圍住。很顯然,只有一個節點會被聚焦。     
 Selected 屬性表明一個節點是否被選中,同樣只有一個節點會被選中。    
 DropTarget 屬性表明節點在拖動操作中是源還是目標。   
    
3、添加、刪除、修改節點:   
   靜態的方法可以在設計時通過Items的編輯器設置各節點的內容。在添加和刪除前必須保證有節點被選中(Treeview.Selected   =   nil)  用AddFirst,   AddChild等先添加根節點,然后以此為基礎,添加此項的子節點。   
  Treeview1.Items.AddFirst (nil, 'Root');  //添加第一個節點    注意 根節點沒有父節點   (TTreeNode.Parent=   nil)   
  Treeview1.Items.AddChild ( nil,  'qt');  //添加第子節點
  Treeview1.Selected.Delete     {刪除節點 }
  Treeview1.Selected.EditText       {編輯節點內容 }
 
  在大批量添加數據到Treeview中時可以使用   
  TreeView.Items.BeginUpdate;   
  TreeView.Items.EndUpdate      
    
 4、節點上顯示圖象   
  Treeview中幾個與圖象相關的屬性:   
  SelectedIndex:當節點被選中時在TimageList   中選什么樣的圖象   
  OverlayIndex:選那副圖象作為掩圖(一幅圖象透明地顯示在另一幅圖象的前面),   
  比如一個節點不可用時加一副X圖象在其前面。   
  ImageIndex:在常態時選用的圖的序號   
  StateIndex:在StateImages這個ImageList中對應的序號,-1時不顯示圖象 ,比較典型的,像在文件管理器中的所顯示的一樣,Treeview控件在節點之前也可以   顯示圖象。在Form中放置一ImageList控件,加入幾個圖片,分別被Index為0,1,…   在Treeview的Image屬性項填入你所加入的ImageList的控件名稱。
TreeNode的ImageIndex   表示節點未被選中時(Selected=nil)的圖片序號,SelectedIndex表示節點被選中時圖片序號。
例如:

  TreeView1.Items[0].ImageIndex := 1;
  TreeView1.Items[0].SelectedIndex := 2;

    
3、TreeView的Level   
  即樹結構的層級例如:TreeView1.Selected.Level=0;    //第一層
 
4、展開與合並  [原創記錄]
  TreeView1.FullExpand;     {全部展開}
  TreeView1.FullCollapse;    {全部合並}
 
5、定位節點  [原創記錄]
 網上講了一個很長的代碼定位數據,其實定位就很簡單代碼:
var
  Node:TTreeNode;
  i:Integer;
  ENode:string;
begin
  ENode:=Trim(Edit1.Text);
  for i:=0 to TreeView1.Items.Count-1 do begin
     if TreeView1.Items.Item[i].Text=ENode then begin
        Node:=TreeView1.Items.Item[i];
        TreeView1.Select(Node);    //選中焦點
        Exit;
     end;
  end;

 

6、實現拖拽  [原創記錄]

實現拖拽的代碼也很簡單,而不是很長,最簡單就這兩句:

  1)開啟時:

TreeView1.DragMode:=dmAutomatic;     //開啟拖拽模式:dmAutomatic自動      dmManual 手動

  2)在TreeView1DragDrop處事件: 

TreeView1.Selected.MoveTo(TreeView1.DropTarget,naAddChild);

 

即可輕松時間拖拽

 

最近更新於 2019.12.16 、 2019.12.17
來源於:https://www.cnblogs.com/guorongtao/p/12049414.html
 
 

 


免責聲明!

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



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