您的位置:首页 > 编程语言 > Delphi

delphi TREEVIEW的简单使用

2013-03-07 19:43 337 查看
.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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: