2011-09-24 3 views
0

У меня есть несколько узлов в древовидном, что пользователь может перетаскивать, чтобы создать дочерние узлы и т.д.C# Получение списка каталогов с помощью TreeView узла Информации

Я использую пару методов для получения списка родительского узла:

private static IList<Node> BuildParentNodeList(AdvTree treeView) 
    { 
     IList<Node> nodesWithChildren = new List<Node>(); 

     foreach (Node node in treeView.Nodes) 
      AddParentNodes(nodesWithChildren, node); 

     return nodesWithChildren; 
    } 

    private static void AddParentNodes(IList<Node> nodesWithChildren, Node parentNode) 
    { 
     if (parentNode.Nodes.Count > 0) 
     { 
      nodesWithChildren.Add(parentNode); 
      foreach (Node node in parentNode.Nodes) 

       AddParentNodes(nodesWithChildren, node); 
     } 
    } 

Затем на родительском узле я использую метод расширения, чтобы получить все дочерние узлы:

public static IEnumerable<Node> DescendantNodes(this Node input) 
{ 
     foreach (Node node in input.Nodes) 
     { 
      yield return node; 
      foreach (var subnode in node.DescendantNodes()) 
       yield return subnode; 
     } 
    } 

Вот типичное расположение моих узлов:

Computer 
    Drive F 
    Movies  
    Music 
     Enrique 
     Michael Jackson 
     Videos 

Мне нужно строковое представление пути каждого узла, имеющего дочерние узлы. например:

Computer\DriveF 
Computer\DriveF\Movies\ 
Computer\DriveF\Music\ 
Computer\DriveF\Music\Enrique 
Computer\DriveF\Music\Michael Jackson 
Computer\DriveF\Music\Michael Jackson\Videos 

У меня возникли проблемы с получением это точное представление с использованием указанных выше способов. Любая помощь будет высоко ценится. Благодарю.

+0

Использование каналов поддержки поставщика, чтобы получить помощь для этого нестандартного компонента. –

ответ

1

Это работает для меня:

private void button1_Click(object sender, EventArgs e) 
{ 
    List<string> listPath = new List<string>(); 
    GetAllPaths(treeView1.Nodes[0], listPath); 

    StringBuilder sb = new StringBuilder(); 
    foreach (string item in listPath) 
    sb.AppendLine(item); 

    MessageBox.Show(sb.ToString()); 
} 

private void GetAllPaths(TreeNode startNode, List<string> listPath) 
{ 
    listPath.Add(startNode.FullPath); 

    foreach (TreeNode tn in startNode.Nodes) 
    GetAllPaths(tn, listPath); 
} 
+1

** Спасибо. Оно работает.** – DelegateX