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;