【问题标题】:How can I find a root node in TreeView如何在 TreeView 中找到根节点
【发布时间】:2011-11-26 07:03:55
【问题描述】:

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

例如:

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

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

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    给你一个小方法:

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

    你可以像这样调用你的代码:

    var rootNode = FindRootNode(currentTreeNode);
    

    【讨论】:

    • 感谢 Fischermaen,所以 treeview 没有任何属性可以找到子节点的根节点,是吗?
    • 在填充过程中缓存根要好得多。
    • @Dmitry:谢谢你提到这一点。缓存根值有一些缺点:您必须跟踪每个更改(当您将节点放到其他地方时)并且您必须添加一个包含数据对象和根节点的管理对象。我的回答有那么糟糕,你不得不投反对票吗?
    • 我认为 MS 树视图只有一个根,可以通过 .topnode 属性访问
    【解决方案2】:
    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);
    }
    

    享受

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多