TreeView 由节点构成,建树通过对 TreeView.items 属性进行操作。Items 是一个 TTreeNodes 对象,这是一个 TTreeNode 集。 一、针对 TTreeNodes,也就是 TreeView.Items,有这些属性: 1、count,节点个数。 2、item[index] ,通过 index 得到节点。 二、针对 TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有: AddFirst 添加第一个根节点。由此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后 添加的节点将排在前面。该函数返回新添加的节点。 AddChildFirst 添加第一个子节点,要求有父节点作为其参数。返回新添加的节点。 AddChild 添加一个子节点,要求有父节点作为其参数。返回新添加的节点。 Add 添加一个兄弟节点,要求有兄弟节点作为其参数。返回新添加的节点。 三、针对 TTreeNodes,也就是 TreeView.Items,
常用的得到节点的操作有: GetFirstNode() 得到根节点。 然后配合 TTreeNode.GetNext(),就可以访问所有的节点。 四、建树举例: var root_node,cur_node:TTreeNode; begin root_node:=AddFirst(nil,'根节点 1'); cur_node:=addChildfirst(root_node,nil,'根节点 1_child1'); add(cur_node,'根节点 1_child2'); root_node:=Add(nil,'根节点 2'); AddChildFirst(root_node,''根节点 2_child1'); end; 五、事件触发: 当从一个节点跳到另一个节点,会触发 TTreeView.OnChange 事件。 该事件中,将传递 node,即当前被选中的节 点。 当修改一个节点的 text 时,会触发 TTreeView.onEdit 事件。 六、将节点和节点所对应的数据联系起来 对于每个 TTreeNode,有个 Data 属性,可以存放一个指针。我们可以利用这个域来存放与节点对应的自己的 数据。 1.我们先定义一个数据结构,作为记录我们要记录的数据。如: type PMyData=^TMyData; TMyData=Record sFName:string; sLName:String; nIndex:integer; end; 2.然后,创建数时,将节点和节点数据联系起来: procedure TForm1.Button1Click(Sender: TObject); var myshuju: PMyData
cur_node:TTreeNode; begin New(MyRecPtr); //记住,一定要先分配内存。有几个节点,就要分配几次内存。 myshuju^.FName:=Edit1.Text; Myshuju^.LName := Edit2.Text; TreeViewIndex := StrToInt(Edit3.Text); with TreeView1 do begin cur_node:=items.AddFirst(nil,'first'); cur_node.data:=myshuju; end; end; 3.当我们选中一个节点时,就可以使用我们的数据了。 procedure TForm1.TreeView1Change(Sender:TObject;Node:TTreeNode); begin if node.data<>nil then self.label1.caption:=pmyData(node.data)^.Fname+pmyData(node.data)^.Lname end; 七、一般使用流程: 1、添加全局变量: b_first:boolean; //记录是否是第一次 访问节点 ,因为此 时 数据还未 准备好, 而一旦访 问 节点就会 触发 OnChange 事件,在此事件处理函数中也许会出错。 2、在 FormCreate 中, a、设置 b_first:=true; b. 创建数并将节点与数据联系。 3、在 FormShow 中 设置 b_first:=false
; 4.在事件 OnChange 中处理节点被选中事件。 5.在 Edit 中处理节点被修改 Text 事件。 并调用 OnChange. 6.在 TreeView.Destory 中 释放 Data 中指向的内存空间。
我在写 treeview 的时候出现了一个小
问题,我的根节点重复了,我应该怎么样去掉重复的节点呢,我在表 里,有“种类”这一个字段,和一个“种类内容” 一个字段,我是想如里在种类里输入与表中有相同的种类的 内容,然后在种类内容里输入别的名称,在 treeview 里就只显示一个种类的根节点,然后在把那条重复的 记录里的“种类内容”里的内容加到“种类”这个根节点下,这是我的代码:请看看怎么样改可以: unit TREEUnit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Co