2009-02-18 248 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);