2012-07-04 68 views
2

我在WinForm中使用TreeView控件。TreeNode關鍵問題

我想使用下面的代碼,但得到「NullReferenceException」。 我遵循提供的語法,即tree.Nodes[key].Nodes.Add(key,text)

我不知道什麼是錯的代碼。

請看看我使用的代碼 -

tvTree.Nodes.Add("Subjects", "Subjects"); 
tvTree.Nodes["Subjects"].Nodes.Add("Physics", "Physics"); 

tvTree.Nodes["Physics"].Nodes.Add("PhysicsP1", "Paper1"); 
tvTree.Nodes["Physics"].Nodes.Add("PhysicsP2", "Paper2"); 
tvTree.Nodes["Physics"].Nodes.Add("PhysicsP3", "Paper3"); 

感謝您分享您的時間。

回答

4

你也可以用

 tvTree.Nodes.Add("Subjects", "Subjects"); 
     tvTree.Nodes["Subjects"].Nodes.Add("Physics", "Physics"); 

     var phyNode = tvTree.Nodes.Find("Physics", true).First(); 

     phyNode.Nodes.Add("PhysicsP1", "Paper1"); 
     phyNode.Nodes.Add("PhysicsP2", "Paper2"); 
     phyNode.Nodes.Add("PhysicsP3", "Paper3"); 
+0

謝謝Emre!我從你和奧斯汀那裏得到了想法。 – IrfanRaza

4

您的問題是「物理」節點不是tvTree的直接子節點,而是「主題」節點的子節點。更簡單的是TreeNodeCollection.Add返回一個TreeNode,稍後可以參考。

var subjects = tvTree.Nodes.Add("Subjects", "Subjects"); 
var physics = subjects.Nodes.Add("Physics", "Physics"); 

physics.Nodes.Add("PhysicsP1", "Paper1"); 
physics.Nodes.Add("PhysicsP2", "Paper2"); 
physics.Nodes.Add("PhysicsP3", "Paper3"); 

如果你只有名字,你可以使用Find

var parentName = "from wherever"; 

var parentNodes = tvTree.Nodes.Find(parentName, true); 

/* handle multiple results */ 
/* add children */ 
+0

謝謝奧斯汀!代碼是完美的,如果我知道孩子的節點。我實際上是從它們的級別獲取數據庫中的節點。 – IrfanRaza

+0

好吧,明白了,讓我試試。 – IrfanRaza

1

實現這一點,你可以使用這個

tvTree.Nodes["Subjects"].Nodes["Physics"].Add("PhysicsP1", "Paper1");