Delphi之TreeView-飞外

TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够。借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文。

TTreeView、TTreeNodes和TTreeNode

TTreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。

常用的属性Count,结点个数;Item[index],通过index得到结点;TTreeNode.Data,指向一个指针,可以存对象,存指针,也可以存整数;TTreeNode.Text,树结点的文本;TTreeNode.ImageIndex,TTreeNode.SelectedIndex,分别是树结点图标序号,树结点选中时图标序号,用于设置树结点的图标;TTreeNode.Expanded属性表明是否所有的子项都全部展开;TTreeNode.HasChildren属性表明一个项是否有子项;TTreeNode.Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住,只能有一个节点会被聚焦。TTreeNode.Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。常用的方法GetFirstNode得到根结点;TTreeNode.GetNext 得到本节点的下一个结点,配合GetFirstNode可以遍历整个树;AddFirst添加第一个根节点,此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。返回新添加的节点。然后以此为基础,添加此项的子节点。删除节点:Treeview.Selected.Delete编辑节点内容:Treeview.Selected.EditText为了提升效率,避免界面大幅闪动,最好使用TreeView.Items.BeginUpdate 和TreeView.Items.EndUpdate 方法;设置树结点图标ImageIndex:在常态时选用的图的序号;SelectedIndex:当节点被选中时在TimageList 中选什么样的图象;一段代码

Items.BeginUpdate;
Items.Clear;
// 建立第一层节点
AddElemntType2Tree(AElementTypeID, AAddNoChildNode);
// 建立第二层节点
if Items.GetFirstNode nil then
begin
oNode := Items[0]; // 选择第一个构件类型结点
while oNode nil do
begin
UpdateTreeNode(oNode, ASelectedElementID);
oNode := oNode.getNextSibling;
end;
end;
// 展开
if Selected nil then
Selected.Expanded := True
else if Items.Count 0 then
begin
oNode := Items.GetFirstNode;
Assert(oNode nil);
// 选中第一个节点的第一个子节点(若存在则为第一个构件类型下的第一个构件)。
Selected := oNode.getFirstChild();
// 若没有选中构件,则选中第一个构件类型节点,否则展开节点。
if Selected = nil then
Selected := oNode
else
Selected.Expanded := True;
end;
Items.EndUpdate;