.1.添加、刪除、修改節點:
靜態的方法可以在設計時通過Items的編輯器設置各節點的內容。
在添加和刪除前必須保證有節點被選中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根節點,如Treeview.Items.AddFirst( nil, 'Root');
然後以此爲基礎,添加此項的子節點。
刪除節點
Treeview.Selected.Delete
編輯節點內容
Treeview.Selected.EditText
注意:由於根節點沒有父節點 (TTreeNode.Parent= nil)
此外,在大批量添加數據到Treeview中時最好使用
TreeView.Items.BeginUpdate;
添加節點
TreeView.Items.EndUpdate
這樣能加快顯示速度。
2.在節點上添加圖象
Treeview中幾個與圖象相關的屬性:
SelectedIndex:當節點被選中時在TimageList 中選什麼樣的圖象
OverlayIndex:選那副圖象作爲掩圖(一幅圖象透明地顯示在另一幅圖象的前面),比如一個節點不可用時加一副X圖象在其前面。
ImageIndex:在常態時選用的圖的序號
StateIndex: 在StateImages這個ImageList中對應的序號,-1時不顯示圖象
比較典型的,象在文件管理器中的所顯示的一樣,Treeview控件在節點之前也可以顯示圖象。在Form中放置一ImageList控件,加入幾個圖片,分別被Index爲0,1,…在Treeview的Image屬性項填入你所加入的ImageList的控件名稱。TreeNode的 ImageIndex表示節點未被選中時(Selected=nil)的圖片序號,SelectedIndex表示節點被選中時圖片序號。
3.關於Level
Level的概念可以用下圖表示:
Level0 Level1 Level2
4.排序
SortType決定什麼時候進行排序;
TreeView.AlphaSort對節點進行排序,如果不能滿足要求,你可以定義自己的CustomSort方法。
5.Drag&Drop操作,與標準的拖放操作使用方法一樣
公司
-用友公司
-王晨
-李明
-王亮
-張東
-李海
-明明
-剛風
下面是我寫的一個TREEVIEW小程序的代碼,你可以看,
var rootnode,subnode,personnode,matenode:ttreenode;
i,j,k:integer;
begin
rootnode:=tv1.items.add(nil,'公司');
qrymaster.Close;
qrymaster.sql.add('select * from master');
qrymaster.Open;
qrymaster.First;
for i:=0 to qrymaster.RecordCount-1 do
begin
subnode:=tv1.Items.Addchild(rootnode,qrymaster.FieldByName('company').AsString);
//原形:rootnode=tv1.items.add(nil,string);
// rootnode.ImageIndex :=0;
// rootnode.stateIndex =0;
qrysub.Close;
qrysub.SQL.clear;
qrysub.SQL.Add('select * from submaster where companyid=:dd');
qrysub.ParamByName('dd').asinteger:=qrymaster.FieldByName('companyid').asinteger;
qrysub.Open;
qrysub.First;
for j:=0 to qrysub.RecordCount-1 do
begin
personnode:=tv1.Items.AddChild(subnode,qrysub.FieldByName('personname').AsString);
// subnode.ImageIndex :=-1;
// subnode.StateIndex :=-1;
qrymate.close;
qrymate.sql.clear;
qrymate.sql.add('select * from comunication where personid=:personid');
qrymate.parambyname('personid').asinteger:=qrysub.fieldbyname('personid').asinteger;
qrymate.open;
for k:=0 to qrymate.recordcount-1 do
begin
matenode:=tv1.items.addchild(personnode,qrymate.fieldbyname('name').asstring);
qrymate.next;
end;
qrysub.Next;
end;
qrymaster.Next;
end;
end;