C# 如何在TreeView中找到根节点

C# 如何在TreeView中找到根节点,c#,winforms,treeview,C#,Winforms,Treeview,我的Windows应用程序中有一个TreeView。在这个树视图中,用户可以为这些根节点添加一些根节点和一些子节点,也可以为这些子节点添加一些子节点,等等 例如: Root1 A B C D E Root2 F G . . . 现在我的问题是,如果我在节点“E”,找到第一个根节点(“Root1”)的最佳方法是什么?这里有一个小方法供您使用: private TreeNode FindRoo

我的Windows应用程序中有一个TreeView。在这个树视图中,用户可以为这些根节点添加一些根节点和一些子节点,也可以为这些子节点添加一些子节点,等等

例如:

Root1
     A
       B
         C
         D
          E  
Root2
     F
      G
.
.
.

现在我的问题是,如果我在节点“E”,找到第一个根节点(“Root1”)的最佳方法是什么?

这里有一个小方法供您使用:

private TreeNode FindRootNode(TreeNode treeNode)
{
    while (treeNode.Parent != null)
    {
        treeNode = treeNode.Parent;
    }
    return treeNode;
}
您可以这样调用代码:

var rootNode = FindRootNode(currentTreeNode);
获取根树节点的示例:

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

享受

谢谢Fischermaen,所以treeview没有任何属性来查找子节点的根节点,是吗?最好在填充过程中缓存根。@Dmitry:谢谢你提到这一点。缓存根值有一些缺点:必须跟踪每次更改(将节点放到其他位置时),并且必须添加包含数据对象和根节点的管理对象。我的答案有那么糟糕,你不得不投反对票吗?我认为MS treeview只有一个根,可以通过.topnode属性访问它
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    var node = (e == null ? ((System.Windows.Forms.TreeView)sender).SelectedNode : e.Node);
    var rootNode = RootTreeNode(node);
}