2009-02-18 259 views
1

如果我有一个TreeView(myTreeview),如何获取所有父节点的节点列表?即有子女的节点c#获取TreeView父节点的列表

+0

您使用的术语“根节点”的方式是不该术语通常使用的方式计算机科学。更多细节: http://en.wikipedia.org/wiki/Tree_(data_structure) – 2009-02-18 11:49:57

+0

正如Kjetil所说,“根节点”不是正确的术语。尝试使用“叶节点”。 – 2009-02-18 12:05:10

回答

5

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