delphi treeview 向每个节点添加信息
delphi treeview add information to every nodes
我想在每次填充 Treeview 时向节点添加信息。
我的意思是,例如,当我创建一个 ChildNode 时,我想 link 它的 kinhsip 程度。
也许 属性 数据是为此制作的,但我不知道如何处理它。
您可以使用 TTreeView 的 OnAddition
事件来执行此操作:
procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode);
begin
Caption := 'Added ' + Node.Text + ', child count: ' +IntToStr(Node.Count);
if Node.Parent <> Nil then
Node.Text := Node.Text + ', child of ' + Node.Parent.Text;
end;
更新 从您的评论看来,就添加到 TreeNode 的属性而言,TTreeView 并不是您可能想要做的事情的正确起点。关键是,TTreeView 是 Windows 常用控件之一的非常薄的包装器。
如果您改用 TVirtualStringTree,您将拥有更大的控制权 - 它是该库中的组件之一:
https://github.com/Virtual-TreeView/Virtual-TreeView
因为树节点数据是完全用户自定义的。
假设您使用的是 VCL 的 TTreeView
组件,而不是 FireMonkey 的 TTreeView
组件,或其他一些第 3 方树视图,那么处理这种情况的最佳方法是派生一个新的 class 从 VCL 的 TTreeNode
class 中添加一个自定义字段来保存你想要的值,然后你可以使用 TTreeView.OnCreateNodeClass
事件让 TTreeView
创建class:
实例
type
TMyTreeNode = class(TTreeNode)
public
Toto: Real;
end;
procedure TMyForm.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TMyTreeNode;
end;
然后,任何时候添加一个新节点,或需要检索现有节点的自定义值,您只需将 TTreeNode
指针类型转换为 TMyTreeNode
即可访问您的自定义值字段:
Node := TreeView1.Items.Add(nil, '...');
TMyTreeNode(Node).Toto := ...;
Node := TreeView1.Items.AddChild(Node, '...');
TMyTreeNode(Node).Toto := ...;
...
Value := TMyTreeNode(TreeView1.Items.Item[index]).Toto;
我想在每次填充 Treeview 时向节点添加信息。 我的意思是,例如,当我创建一个 ChildNode 时,我想 link 它的 kinhsip 程度。 也许 属性 数据是为此制作的,但我不知道如何处理它。
您可以使用 TTreeView 的 OnAddition
事件来执行此操作:
procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode);
begin
Caption := 'Added ' + Node.Text + ', child count: ' +IntToStr(Node.Count);
if Node.Parent <> Nil then
Node.Text := Node.Text + ', child of ' + Node.Parent.Text;
end;
更新 从您的评论看来,就添加到 TreeNode 的属性而言,TTreeView 并不是您可能想要做的事情的正确起点。关键是,TTreeView 是 Windows 常用控件之一的非常薄的包装器。
如果您改用 TVirtualStringTree,您将拥有更大的控制权 - 它是该库中的组件之一:
https://github.com/Virtual-TreeView/Virtual-TreeView
因为树节点数据是完全用户自定义的。
假设您使用的是 VCL 的 TTreeView
组件,而不是 FireMonkey 的 TTreeView
组件,或其他一些第 3 方树视图,那么处理这种情况的最佳方法是派生一个新的 class 从 VCL 的 TTreeNode
class 中添加一个自定义字段来保存你想要的值,然后你可以使用 TTreeView.OnCreateNodeClass
事件让 TTreeView
创建class:
type
TMyTreeNode = class(TTreeNode)
public
Toto: Real;
end;
procedure TMyForm.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TMyTreeNode;
end;
然后,任何时候添加一个新节点,或需要检索现有节点的自定义值,您只需将 TTreeNode
指针类型转换为 TMyTreeNode
即可访问您的自定义值字段:
Node := TreeView1.Items.Add(nil, '...');
TMyTreeNode(Node).Toto := ...;
Node := TreeView1.Items.AddChild(Node, '...');
TMyTreeNode(Node).Toto := ...;
...
Value := TMyTreeNode(TreeView1.Items.Item[index]).Toto;