Delphi 中TreeView使用
Delphi 中TreeView使用
TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。
一、针对TTreeNodes,也就是 TreeView.Items,有这些属性:
- count 节点个数。
- item[index] 通过index得到节点。
二、针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有:
- AddFirst 添加第一个根节点。由此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。该函数返回新添加的节点。
- AddChildFirst 添加第一个子节点,要求有父节点作为其参数。返回新添加的节点。
- AddChild 添加一个子节点,要求有父节点作为其参数。返回新添加的节点。
- Add 添加一个兄弟节点,要求有兄弟节点作为其参数。返回新添加的节点。
三、针对TTreeNodes,也就是 TreeView.Items,常用的得到节点的操作有:
- GetFirstNode() 得到根节点。
- 然后配合TTreeNode.GetNext(),就可以访问所有的节点。
四、建树举例:
1 2 3 4 5 6 7 8 9 | 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.我们先定义一个数据结构,作为记录我们要记录的数据。如:
1 2 3 4 5 6 7 | type PMyData=^TMyData; TMyData= Record sFName: string ; sLName: String ; nIndex: integer ; end ; |
2.然后,创建数时,将节点和节点数据联系起来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | procedure TForm1 . Button1Click(Sender: TObject); var MyData: PMyData cur_node:TTreeNode; begin New(MyData); //记住,一定要先分配内存。有几个节点,就要分配几次内存。 MyData^.FName:=Edit1 . Text; MyData^.LName := Edit2 . Text; TreeViewIndex := StrToInt(Edit3 . Text); with TreeView1 do begin cur_node:=items . AddFirst( nil ,first); cur_node . data:=MyData; end ; end ; |
3.当我们选中一个节点时,就可以使用我们的数据了。
1 2 3 4 5 | procedure TForm1 . TreeView1Change(Sender:TObject;Node:TTreeNode); begin if node . data<> nil then self . label1 . caption:=pmyData(node . data)^.Fname+pmyData(node . data)^.Lnam 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 中指向的内存空间。
7.指针的释放
1 2 3 4 | procedure TForm1 . TreeView1Deletion(Sender: TObject; Node: TTreeNode); begin dispose(PMyData(node . data)); end ; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报