代码之家  ›  专栏  ›  技术社区  ›  TK.

C获取TreeView父节点列表

  •  2
  • TK.  · 技术社区  · 16 年前

    如果我有一个TreeView(MyTreeView),如何获取所有父节点的列表?即具有子节点的节点

    2 回复  |  直到 16 年前
        1
  •  5
  •   ng5000    16 年前

    mytreeview.nodes将为您提供一个由ms定义的根节点列表,这基本上意味着树的根分支上的节点。

    此代码将生成具有子节点的根节点列表:

        IList<TreeNode> nodesWithChildren = new List<TreeNode>();
        foreach( TreeNode node in myTreeview.Nodes )
            if( node.Nodes.Count > 0 ) nodesWithChildren.Add( node );
    

    更新:如果你想要树视图中所有有子节点的节点,不管它在树中的深度如何,都要使用一些递归,例如。

    private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
    {
        IList<TreeNode> nodesWithChildren = new List<TreeNode>();
    
        foreach( TreeNode node in treeView.Nodes  )
            AddParentNodes(nodesWithChildren, node);
    
        return nodesWithChildren;
    }
    
    private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNode parentNode)
    {
        if (parentNode.Nodes.Count > 0)
        {
            nodesWithChildren.Add( parentNode );
            foreach( TreeNode node in parentNode.Nodes )
                AddParentNodes( nodesWithChildren, node );
        }
    }
    

    更新2:只有1个foreach循环的递归方法:

    private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
    {
        IList<TreeNode> nodesWithChildren = new List<TreeNode>();
        AddParentNodes( nodesWithChildren, treeView.Nodes );
        return nodesWithChildren;
    }
    
    private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNodeCollection parentNodes )
    {
        foreach (TreeNode node in parentNodes)
        {
            if (node.Nodes.Count > 0)
            {
                nodesWithChildren.Add( node );
                AddParentNodes(nodesWithChildren, node.Nodes);
            }
        }
    }
    
        2
  •  1
  •   user17541    16 年前
    private void AddNonLeafNodes(List<TreeNode> nonLeafNodes, TreeNodeCollection nodes)
    {
        foreach( TreeNode node in nodes )
        {
            if( node.Nodes.Count > 0 )
            {
                nonLeafNodes.Add(node);
                AddNonLeafNodes(nonLeafNodes,node.Nodes);
            }
        }
    }
    
    List<TreeNode> nonLeafNodes = new List<TreeNode>();
    AddNonLeafNodes(nonLeafNodes,treeView1.Nodes);
    
    推荐文章