2011-01-07 80 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);