delphi treeview将信息添加到每个节点

时间:2017-03-27 09:13:31

标签: delphi treeview treenode

每次填充Treeview时,我都想向节点添加信息。 我的意思是,例如,当我创建一个ChildNode时,我想把它与它的kinhsip程度联系起来。 也许属性数据是为此而制作的,但我不知道如何处理它。

3 个答案:

答案 0 :(得分:3)

假设您使用的是VCL的TTreeView组件,而不是FireMonkey的TTreeView组件或其他第三方树视图,那么处理这种情况的最佳方法是从中获取新类VCL的TTreeNode课程并为其添加自定义字段以保留所需的值,然后您可以使用TTreeView.OnCreateNodeClass事件让TTreeView创建您的课程实例:

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;

答案 1 :(得分:0)

您可以使用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;

更新从您的评论中可以看出,TTreeView在添加到treenode的属性方面并不是真正想要做的事情。关键是,TTreeView是Windows常用控件之一的完美包装。

如果您使用TVirtualStringTree,您将获得更大的控制权 - 它是此库中的组件之一:https://github.com/Virtual-TreeView /虚拟-树视图,

因为树节点数据完全是用户定义的。

答案 2 :(得分:-2)

这里是:

type
PMyrec = ^TMyrec;
TMyrec = record
 toto: double;
end;

...

procedure TForm1.addnodewithdata(Sender: TObject);
  var
    NewNode : TTreeNode;
    Myrec:double;
    MyrecPtr: PMyrec;
  begin
         new(MyrecPtr);
         MyrecPtr^.toto:=1000.;
         NewNode := treeview1.Items.AddChildObject(Node, 'name',MyrecPtr);
  end;

  procedure TForm1.readdataofselectenode(Sender: TObject);
  var
     CNode : TTreeNode;
  begin
     Cnode:=treeview1.Items[strtoint(edit1.Text)];
     if (cnode.Data <> nil) then         
     showmessage(floattostr(PMyrec(cnode.Data)^.toto));
  end;