您当前的位置:首页 > 仿真假山与仿真树 > 仿真假山与仿真树作用
TTreeView Delphi组件显示项目的分层列表- 树节点。节点由节点文本和可选图像表示。树视图中的每个节点都是TTreeNode类的实例。
虽然您可以在设计时使用TreeView Items Editor在树形视图中填充项目,但在大多数情况下,您将在运行时填充树形视图-取决于应用程序的用途。
TreeView Items Editor显示只有少量信息可以“附加”到节点:文本和一些图像索引(对于正常状态,展开,选定等)。
本质上,树视图组件易于编程。有两种方法可以将新节点添加到树中并设置其层次结构。
这是将10个节点添加到树视图(名为“ TreeView1”)的方法。请注意,Items属性提供对树中所有节点的访问。AddChild将新节点添加到树视图。个参数是父节点(用于构建层次结构),第二个参数是节点文本。
古朴大气仿真古树北京淡水河谷于网络摘录此图,若有不妥请通知我们
AddChild返回新添加的TTreeNode。在以上代码示例中,所有10个节点都被添加为根节点(没有父节点)。
在任何更复杂的情况下,您都希望节点携带更多信息-好具有一些特定于您正在开发的项目的特殊值(属性)。
假设您要显示数据库中的客户订单项目数据。每个客户可以拥有更多订单,每个订单由更多项目组成。这是一个可以在树视图中显示的层次关系:
在您的数据库中,每个订单和每个项目都会有更多信息。树状视图显示(只读)当前状态-您想查看所选订单的每个订单(甚至每个项目)详细信息。
当用户选择节点“ Order_1_1”时,您希望向用户显示订单详细信息(总计,日期等)。
那时,您可以从数据库中获取所需的数据,但是您需要知道所选顺序的标识符(比如说整数值)才能获取正确的数据。
古朴大气仿真古树北京淡水河谷于网络摘录此图,若有不妥请通知我们
我们需要一种方法来将该订单标识符与节点一起存储,但是我们不能使用Text属性。我们需要存储在每个节点中的自定义值是一个整数(仅作为示例)。
当发生这种情况时,您可能会倾向于寻找Tag属性(许多Delphi组件都具有),但是TTreeNode类未公开Tag属性。
将自定义数据添加到树节点:TreeNode.Data属性
树节点的Data属性允许您将自定义数据与树节点相关联。数据是一个指针,可以指向对象和记录。在TreeView中显示XML(RSS提要)数据显示了如何将记录类型变量存储到树节点的Data属性中。
许多项目类型的类都公开了Data属性-您可以将其与项目一起存储。一个示例是TListView组件的TListItem。这是将对象添加到Data属性的方法。
将自定义数据添加到树节点:TreeView.CreateNodeClass
如果您不想使用TTreeNode的Data属性,而是想用几个属性扩展自己的TreeNode,Delphi也提供了一个解决方案。
古朴大气仿真古树北京淡水河谷于网络摘录此图,若有不妥请通知我们
说你想做
以下是使用您自己的一些属性扩展标准TTreeNode的方法:
1、通过扩展TTreeNode创建TMyTreeNode。
2、添加一个字符串属性MyProperty。
3、处理树视图的OnCreateNodeClass以指定应创建的节点类。
4、在窗体级别上公开类似TreeView1_SelectedNode属性的内容。这将是TMyTreeNode类型。
5、处理树视图的OnChange,将所选节点的值写入到SelectedNode中。
6、使用TreeView1_Selected.myProperty读取或写入新的自定义值。
这是完整的源代码(窗体上的TButton:“ Button1”和TTreeView:“ TreeView1”):
这次不使用TTreeNode类的Data属性。而是,将TTreeNode类扩展为具有自己的树节点版本:TMyTreeNode。
使用树视图的OnCreateNodeClass事件,您可以创建自定义类的节点,而不是标准TTreenode类。