由于不可能使节点不可见,我决定在我需要它们之前不要创建它们。
我的代码:
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);
}
}
在ComboBox
中,几个类别。它的代码负责“书籍”。在TextBox中,我正在编写标题,单击按钮后,此代码开始工作。首先,它检查是否存在根节点“Books”。如果是,它只是添加文本框内的任何内容作为子节点。但如果没有,它会创建名为“Books”的根节点,然后添加一个子节点。我在这一行得到错误:
treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
错误:
NullReferenceException was unhandled
另外,是否可以改变索引号,即。我想制作5个类别,但我也想要具体订单,比方说1.House 2.Cars 3.Books 4.Phones 5.Bikes和我想添加第一本书,然后是汽车,然后是自行车。有什么可以改变索引号吗?
答案 0 :(得分:3)
你在哪部分得到错误?在if或in else?
此外,您的代码可能更简单:
if(comboBox3.Text == "Books")
{
if (!treeView1.Nodes.ContainsKey("Books"))
treeView1.Nodes.Add("Books");
treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}
修改强>
添加TreeNode时,必须为节点提供名称。只有这样,您才能通过名称访问集合来获取集合的节点。如果未设置名称,仍可以使用索引访问该集合。但在这种情况下,您使用的是字符串键,因此您还必须为Books-TreeNode提供名称:
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);
}
答案 1 :(得分:2)
ContainsKey
未搜索每个节点的子节点。它只搜索您提供的根节点。为了深入检查遏制,显然必须使用treeview.Nodes.Find(Key, true)
。有人知道另一个解决方案吗?
答案 2 :(得分:0)
这不是必需的
else if (treeView1.Nodes.ContainsKey("Books") == false)
您只需按else
替换。
对于基于索引的添加,我认为您可以查看以下链接 TreeNodeCollection.Insert Method