今天再細研究了一下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