如何检查TreeView根节点是否存在子节点?

5

我有一个树形视图,初始的根节点为“Root”。如果我右键单击根节点,将显示上下文菜单,并显示一些选项,如“新建”和其他选项。如果我选择“新建”,则会向根节点添加一个子节点。如果我再次右键单击根节点,如果根节点有子节点,我想清除所有子节点并添加一个新的子节点,我该怎么做呢?

6个回答

6

TreeNode.Nodes提供了一个包含当前节点所有子节点的列表。

你可以在该集合上调用Clear来删除所有子节点。


但是我该如何检查根节点是否存在子节点,我无法获取它。 - Developer
@dorababu:您可以使用 MouseDown 事件中的位置以及 HitTest 方法来实现。请参考我的回答,其中包含相关代码:http://stackoverflow.com/questions/3760256/changing-the-node-value-of-treeview/3760405#3760405 - Hans Olsson
这是 TreeView.Nodes 属性,如此处所述:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.treeview.nodes.aspx - Hans Olsson
@Ho1:实际上,当我的表单最初加载时,我会有一个只有根节点的树形视图。如果我右键单击它,我将有一个上下文菜单,在其中我将从用户选择的“新建”选项中添加一个子节点。现在我的树形视图将具有根节点和子节点。再次,如果我右键单击根节点并从上下文菜单中选择“新建”,我想清除现有的子节点,并向树形视图添加一个新的子节点。 - Developer
@dorababu:如果你将我在之前问题中的答案中的这一行 info.Node.Text = "new path"; 替换为以下两行代码 info.Node.Nodes.Clear();info.Node.Nodes.Add(newNode);,那么这是否符合你的要求? - Hans Olsson
显示剩余2条评论

1

最终答案如下

    if (tvwACH.HitTest(location).Node.Nodes.Count > 0 && tvwACH.SelectedNode.Parent == null )
        {
            foreach (TreeNode node in tvwACH.Nodes)
            {
                node.Nodes.Clear();
            }
    }

我忘记了这个节点计数... :D 再次感谢 @Dotnet - gumuruh

0
在“右键单击”处理程序中,假设您使用鼠标单击,您可以使用事件参数TreeNodeMouseClickEventArgs获取当前节点...
void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
      if (e.Button == MouseButtons.Right)
      {
        TreeNode selectedNode = e.Node;
      }
    }

0

你也可以尝试相反的操作,即检查当前节点是否有父节点。

if(treeView1.SelectedNode.Parent == null) {} //parent
else{} //child

0
你可以检查TreeNode.Nodes属性。如果计数大于零,则有子节点,否则没有。

-1
                foreach (TreeNode node in treeview.Nodes)
                     {

                        if (node.ChildNodes.Count != 0)
                        {

                           //Node exists

                        }
                        else
                        {

                          //Node doesn't exists

                        }
                    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接