C # Получение списка каталогов с использованием информации узла TreeView - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть пара узлов в древовидном представлении, которые пользователь может перетащить для создания дочерних узлов и т. Д.

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

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

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

1 Ответ

1 голос
/ 24 сентября 2011

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

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