轻松绑定到Treeview节点的对象

时间:2009-12-10 13:20:58

标签: c# treeview

如何将对象绑定到C#中的treeview(Winforms)节点?

我想到了类似于ExNode:Windows.Forms.Node,它可以将对象作为成员除了treenode名称之外......但是我不确定这是正确的方法。

4 个答案:

答案 0 :(得分:18)

你有几个策略:

  1. 在任何Node的Tag属性中粘贴任何类型的对象:缺点:当您检索它以使用它时,您必须将其强制转换为“本机形式”:如果是“本机形式”不是类型'对象。

  2. 子类TreeNode,并为您的对象添加公共字段,公共属性或其他内容......甚至是列表......或者您需要与节点关联的任何内容。

  3. 假设您的对象属于同一类型,您可以创建一个类型的字典:Dictionary< TreeNode,myObjectType>,实例化它,并根据需要存储TreeNode及其关联的Object。作为键/值对的方式。

  4. 策略#1和#3的优势在于您只能根据需要存储关联对象策略#2:更适合您预期每个TreeNode将具有关联对象的情况。< / p>

    当然,对于stragy#1和#3,您需要在运行时测试是否存在与特定节点关联的对象。

    策略#1是一个简单的测试:如果节点的标签属性为空:你知道没有对象:如果不是空...并且标签字段中可能存在多种类型的对象...那么你将不得不拔出Tag对象,并确保它是正确的类型,如下所示:(以下示例假定公共类,“Class1”)已分配给TreeView中第一个节点的标记: / p>

    TreeNode thisNode = theTreeView.Nodes[0];
    if (((thisNode.Tag != null) && (thisNode.Tag is Class1))) ... handle the object ...
    

    策略#3稍微容易一点,因为您可以只评估字典&lt; Node,myObject&gt;。将节点作为键包含。

答案 1 :(得分:3)

您是否正在寻找类似TreeNodes上的Tag属性的内容?它可以容纳任何物体。

http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx

答案 2 :(得分:2)

This MSDN article有一些很好的信息,例如:

class myTreeNode : TreeNode
{
   public string FilePath;

   public myTreeNode(string fp)
   {
      FilePath = fp;
      this.Text = fp.Substring(fp.LastIndexOf("\\"));
   }
}

答案 3 :(得分:0)

您可能会研究TreeListView。它不是完美的,但效果很好,并且比我发现的任何其他方法都更容易在树状视图中显示对象。