0

假设我有 3 个类别的树,每个类别有 3 个子节点。当所有子节点都被删除时,我想删除根节点。我试过这样的事情:

        TreeNode current = treeView1.SelectedNode;
        TreeNode parent  = treeView1.SelectedNode.Parent;

        if (parent.Nodes.Count == 0)
        {
            parent.Nodes.Remove(current);
        }

我把它放在Form1_Load中。不幸的是,当所有子节点都消失时,什么也没有发生。这段代码正确吗?或者也许我放错了地方,我应该把它放在别的地方?

编辑:我的树看起来像这样:

早晨

  • 刷牙
  • 喝咖啡

下午

  • 晚餐
  • 电视

夜晚

  • 睡觉

所以如果我决定删除“Sleep”,我也想删除“Night”。但是如果我决定删除“TV”,我想保留“Dinner”和“Afternoon”。

4

2 回答 2

1

如果父节点为空,那么您就知道您在根节点上。因此需要直接从 TreeView 的 Nodes 集合中删除该节点。否则,您可以从父节点中删除选定的节点。甚至没有理由查看节点数。

现在,您还需要检查当前节点是否也不为空;因为在树中没有节点被选中是完全合理的。

TreeNode current = treeView1.SelectedNode;
if(current == null)
    return;

TreeNode parent  = treeView1.SelectedNode.Parent;
if (parent == null)
{
    treeView1.Nodes.Remove(current);
}
else
{
    parent.Nodes.Remove(current);
}
于 2013-07-19T14:42:43.950 回答
1

试试这个:

if (treeView1.SelectedNode != null)
{
    if (treeView1.SelectedNode.Parent == null) treeView1.SelectedNode.Remove();
    else if (treeView1.SelectedNode.Parent.Nodes.Count == 1) treeView1.SelectedNode.Parent.Remove();
    else treeView1.SelectedNode.Remove();
}
于 2013-07-19T21:25:51.180 回答