2012-07-04 66 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");