this.treeView.Nodes.Add(node);
bool my_node_exists = this.treeView.Nodes.Contains(node);
TreeNode[] my_nodes = this.treeView.Nodes.Find(node.Text, true);
此处my_node_exists
为true
,但my_nodes
为空。
谁能告诉我为什么?
答案 0 :(得分:3)
从TreeNodeCollection.Find
的文档中,它返回:
一个TreeNode对象数组,其Name属性与指定的键匹配
您正在传递Text
属性 - 因此,除非节点的名称恰好与其文本相同,否则将找不到该节点。
如果您需要按文本查找节点,我认为您必须递归迭代所有节点并自行测试每个节点。
答案 1 :(得分:1)
文档令人困惑,它可互换地使用术语“名称”和“键”。 Find()方法按键查找节点,而不是节点文本。确保在添加节点时进行设置。这有效:
treeView1.Nodes.Add("aardvark", "Eats ants");
TreeNode[] nodes = treeView1.Nodes.Find("aardvark", true);
Debug.Assert(nodes.Length > 0);
答案 2 :(得分:0)
你是不是在使用树的两种不同表示?第一个是基于TreeNode,但Find调用依赖于(key,text)。在您的示例中,您永远不会为节点设置密钥。 TreeView类是否足够智能以将node.Text用作键?
答案 3 :(得分:0)
您应该使用Node的Name属性来查找IT。
TreeNode node = new TreeNode("data");
this.treeView.Nodes.Add(node);
bool a = this.treeView.Nodes.Contains(node);
int count = this.treeView.Nodes.Count;
TreeNode[] nodess = this.treeView.Nodes.Find(node.Name, false);