轻松绑定Treeview节点的对象
如何将对象绑定到C#中的treeview(Winforms)节点?
我想到了类似于ExNode:Windows.Forms.Node,它可以将对象作为成员除了treenode名称之外……但是我不确定这是正确的方法。
你有几个策略:
-
在任何Node的Tag属性中粘贴任何类型的对象:缺点:当你检索它以使用它时,你必须将它强制转换回它的“本机forms”:如果那个“本机forms”不是类型’对象。
-
子类TreeNode,并为您的对象添加公共字段,公共属性或其他内容……甚至列表……或者您需要与节点关联的任何内容。
-
假设您的对象属于同一类型,您可以创建一个类型的字典:Dictionary
,实例化它,并根据需要将TreeNode及其关联的对象存储为键/值对。
策略#1和#3的优点是,您只能根据需要存储关联对象策略#2:更适合您预期每个TreeNode将具有关联对象的情况。
当然,对于stragy#1和#3,您需要在运行时测试是否存在与特定节点关联的对象。
策略#1是一个简单的测试:如果节点的标签属性为空:你知道没有对象:如果不是空的……并且标签字段中可能存在多种类型的对象…那么你’我必须拔出Tag对象,并确保它是正确的类型,如下所示:(以下示例假定公共类“Class1”已分配给TreeView中第一个节点的标记:
TreeNode thisNode = theTreeView.Nodes[0]; if (((thisNode.Tag != null) && (thisNode.Tag is Class1))) ... handle the object ...
策略#3稍微容易一些,因为您可以只评估Dictionary
你在TreeNodes上寻找类似Tag属性的东西吗? 它可以容纳任何物体。
http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx
这篇MSDN文章有一些很好的信息,例如:
class myTreeNode : TreeNode { public string FilePath; public myTreeNode(string fp) { FilePath = fp; this.Text = fp.Substring(fp.LastIndexOf("\\")); } }