IrfanRaza
IrfanRaza

Reputation: 3058

TreeNode key issue

I am using TreeView control in WinForm.

I am trying to use the following code, but getting "NullReferenceException". I am following the syntax provided i.e. tree.Nodes[key].Nodes.Add(key,text)

I don't know whats wrong with the code.

Please have a look at the code i used -

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

Thanks for sharing your time.

Upvotes: 2

Views: 6301

Answers (3)

B H
B H

Reputation: 1878

You can use this

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

Upvotes: 1

Austin Salonen
Austin Salonen

Reputation: 50215

Your problem is that the "Physics" nodes are not direct children of tvTree but instead are children of the "Subjects" node. What should make this easier is that TreeNodeCollection.Add returns a TreeNode that you can reference later on.

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

If you only have the name, you can use Find:

var parentName = "from wherever";

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

/* handle multiple results */
/* add children */

Upvotes: 6

esertbas
esertbas

Reputation: 486

Also you may achieve this with

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

Upvotes: 4

Related Questions