如何在TreeView中找到根节点

7
我有一个TreeView在我的Windows应用程序中。在这个TreeView中,用户可以添加一些根节点以及这些根节点的子节点,以及这些子节点的子节点等等...
例如:
Root1
     A
       B
         C
         D
          E  
Root2
     F
      G
.
.
.

现在我的问题是,如果我在节点'E',最好的方法是找到它的第一个根节点('Root1')是什么?
2个回答

13

这里是一个小方法:

private TreeNode FindRootNode(TreeNode treeNode)
{
    while (treeNode.Parent != null)
    {
        treeNode = treeNode.Parent;
    }
    return treeNode;
}

您可以在您的代码中像这样调用:

var rootNode = FindRootNode(currentTreeNode);

谢谢Fischermaen,那么TreeView没有任何属性可以找到子节点的根节点,是吗? - M_Mogharrabi
1
在填充期间捕获根节点会更好。 - user572559
@Dmitry:谢谢你提到这个。缓存根值有一些缺点:你必须跟踪每一个变化(当你将节点放到其他位置时),并且你必须添加一个包含数据对象和根节点的管理对象。我的回答那么糟糕吗,你不得不对它进行投票? - Fischermaen
我认为MS TreeView只有一个根节点,并且可以通过.topnode属性访问。 - DJDave

0
public TreeNode RootTreeNode(TreeNode n) { while (n.Level > 0) { n = n.Parent; } return n; } 

获取根节点的示例:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    var node = (e == null ? ((System.Windows.Forms.TreeView)sender).SelectedNode : e.Node);
    var rootNode = RootTreeNode(node);
}

享受


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