【问题标题】:c# Obtain a list of TreeView Parent nodesc# 获取TreeView父节点列表
【发布时间】:2009-02-18 11:11:23
【问题描述】:

如果我有一个 TreeView (myTreeview),我如何获得所有作为父节点的节点的列表?即有孩子的节点

【问题讨论】:

  • 您使用术语“根节点”的方式与计算机科学中通常使用的方式不同。更多详情:en.wikipedia.org/wiki/Tree_(data_structure)
  • 正如 Kjetil 所说,“根节点”不是正确的术语。尝试使用“叶节点”。
  • 我使用术语“根节点”的唯一原因是,这是 c# 中用于将节点添加到树视图的术语。感谢您的更正,应该改用“父节点”。

标签: c# winforms treeview parent-node


【解决方案1】:

myTreeview.Nodes 将为您提供 MS 定义的根节点列表,这基本上意味着树的根分支上的节点。

此代码将构建一个包含子节点的根节点列表:

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

更新:如果您希望 TreeView 中的所有节点都有一个子节点,而不管树有多深,请使用一些递归,例如

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);
        }
    }
}

【讨论】:

  • 感谢您的全面回答!如果可能的话,我会 +10!
【解决方案2】:
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);

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多