Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查节点是否存在并添加子节点_C#_Visual Studio 2010 - Fatal编程技术网

C# 检查节点是否存在并添加子节点

C# 检查节点是否存在并添加子节点,c#,visual-studio-2010,C#,Visual Studio 2010,因为不可能使节点不可见,所以我决定在需要它们之前不创建它们 我的代码: if(comboBox3.Text == "Books") { if (treeView1.Nodes.ContainsKey("Books") == true) { treeView1.Nodes["Books"].Nodes.Add(textBox1.Text); } else if (treeView1.Nodes.ContainsKey("Books") == false)

因为不可能使节点不可见,所以我决定在需要它们之前不创建它们

我的代码:

if(comboBox3.Text == "Books")
{
   if (treeView1.Nodes.ContainsKey("Books") == true)
   {
      treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
   }

   else if (treeView1.Nodes.ContainsKey("Books") == false)
   {
      treeView1.Nodes.Add("Books");
      treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
   }

}
组合框中
有几个类别。这是负责“书籍”的代码。在文本框中,我正在写标题,点击一个按钮后,这个代码开始工作。首先,它检查根节点“Books”是否存在。如果是,它只需将文本框中的任何内容添加为子节点。但如果不是,它将创建名为“Books”的根节点,然后添加一个子节点。我在这行中遇到错误:

treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
错误:

NullReferenceException was unhandled

还有,这是否可能改变索引号,即,我想做5个类别,但我也想有具体的顺序,比如说1.房子2.汽车3.书籍4.电话5.自行车,我想先添加书籍,然后添加汽车,再添加自行车。索引号有什么需要更改的吗?

在哪一部分会出现错误?在if中还是在else中

此外,您的代码可能更简单:

if(comboBox3.Text == "Books")
{
    if (!treeView1.Nodes.ContainsKey("Books"))
        treeView1.Nodes.Add("Books");

    treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}
编辑:

添加TreeNode时,必须提供节点的名称。只有这样,才能通过名称访问集合来获取集合的节点。如果不设置名称,仍然可以使用索引访问集合。但在本例中,您使用的是字符串键,因此还必须为Books树节点提供名称:

if(comboBox3.Text == "Books")
{
   if (!treeView1.Nodes.ContainsKey("Books"))
   {
       TreeNode booksNode = new TreeNode("Books");
       booksNode.Name = "Books";
       treeView1.Nodes.Add(booksNode);
   }

   treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}
同样简短(但可能可读性较差)的是:

if(comboBox3.Text == "Books")
{
   if (!treeView1.Nodes.ContainsKey("Books"))
       treeView1.Nodes.Add(new TreeNode("Books") { Name = "Books" });

   treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}
这不是必需的

   else if (treeView1.Nodes.ContainsKey("Books") == false)
您只需替换为
else

对于添加基于索引,我想你可以检查下面的链接
ContainsKey
未搜索每个节点的子节点。它只搜索您提供的根节点。为了深入检查包含,显然必须使用
treeview.Nodes.Find(Key,true)
。有人知道其他解决方案吗?

无法隐藏节点??父节点将是可折叠的,对吗?我的意思是使节点不可见。参数不必是TreeNode对象!如果将字符串传递给该方法,则将在node-collection的末尾添加一个新的TreeNode,其中指定的字符串为文本。感谢您的帮助,现在代码看起来更好了。我在其他部分出错了。非常感谢,效果很好。您的代码还解决了另一个问题,即复制“Books”根节点。