2009-02-18 2 views
1

Если у меня есть TreeView (myTreeview), как я могу получить список всех узлов, являющихся родительскими узлами? то есть узлы, у которых есть дочерние объектыC# Получить список родительских узлов TreeView

+0

Способ использования термина «коренные узлы» не так, как этот термин обычно используется в Информатика. Подробнее: http://en.wikipedia.org/wiki/Tree_(data_structure) –

+0

Как сказал Кетил, «корневые узлы» - не правильный термин. Попробуйте использовать «листовые узлы». –

+0

Единственная причина, по которой я использую термин «Root Node», это потому, что это термин, используемый в C# для добавления узлов в treeview. Спасибо за исправление «родительский узел». –

ответ

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 Еогеасп:

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

Спасибо за всесторонний ответ! Я бы +10, если это возможно! –

+0

Спасибо, очень благодарен :) – ng5000

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