2011-01-07 86 views
0
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_existstrue,但my_nodes是空的。帮助我理解这个树形查询

有谁能告诉我为什么?

回答

1

该文档混淆,它使用术语“名称”和“钥匙”交替使用。 Find()方法通过键找到节点,而不是节点文本。确保在添加节点时进行设置。这个作品:

 treeView1.Nodes.Add("aardvark", "Eats ants"); 
     TreeNode[] nodes = treeView1.Nodes.Find("aardvark", true); 
     Debug.Assert(nodes.Length > 0);    
3

TreeNodeCollection.Find的文档,则返回:

树节点的对象数组name属性相匹配的指定键

你传入Text财产 - 因此,除非该节点的名称恰好与它的文本相同,它不会找到该节点。

如果您需要通过文本查找节点,我认为您必须递归地遍历所有节点并自己测试每个节点。

+0

Off topic:哇...乔恩...你是SO社区经理? – Schultz9999 2011-01-07 07:07:07

0

是不是你使用树的两个不同的表示?第一个使用TreeNode,但Find调用依赖于(键,文本)。在你的例子中,你永远不会为节点设置一个密钥。 TreeView类是否足够聪明以使用node.Text作为关键字?

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);