Как я могу получить список всех узлов дерева (на всех уровнях) в элементе управления TreeView
?Получить список всех узлов дерева (на всех уровнях) в элементах управления TreeView
ответ
Предполагая, что у вас есть дерево с одним корневым узлом, следующий код всегда будет зацикливать узлы дерева до самого глубокого, затем перейдите на один уровень назад и так далее. Он будет печатать текст каждого узла. (Непроверенные из верхней части моей головы)
TreeNode oMainNode = oYourTreeView.Nodes[0];
PrintNodesRecursive(oMainNode);
public void PrintNodesRecursive(TreeNode oParentNode)
{
Console.WriteLine(oParentNode.Text);
// Start recursion on all subnodes.
foreach(TreeNode oSubNode in oParentNode.Nodes)
{
PrintNodesRecursive(oSubNode);
}
}
Update для ответа Крумелер (в заменить 2 первые строки его/ее решение с этим):
foreach (var node in oYourTreeView.Nodes)
{
PrintNodesRecursive(node);
}
Да, тогда он выплюнет все поддеревья, если будет несколько корней. Но на самом деле: дерево с несколькими узлами действительно редко в природе :-) О, и это «его»;) – Krumelur
На самом деле, в природе это довольно распространенная фаеномена :) В программировании я могу себе представить несколько сценариев где это полезно. Например: treeview, содержащие отделы компании, каждый из которых имеет поддепозиты и т. Д. У вас, вероятно, не будет супердепартамента. – dzendras
Вы правы. Я скорректировал свой ответ. Была опечатка. – Krumelur
Ленивый LINQ подход, только в случае, если что-то вроде этого:
private void EnumerateAllNodes()
{
TreeView myTree = ...;
var allNodes = myTree.Nodes
.Cast<TreeNode>()
.SelectMany(GetNodeBranch);
foreach (var treeNode in allNodes)
{
// Do something
}
}
private IEnumerable<TreeNode> GetNodeBranch(TreeNode node)
{
yield return node;
foreach (TreeNode child in node.Nodes)
foreach (var childChild in GetNodeBranch(child))
yield return childChild;
}
Вы можете использовать два метода рекурсивного расширения. Вы можете либо позвонить myTreeView.GetAllNodes()
или myTreeNode.GetAllNodes()
:
public static List<TreeNode> GetAllNodes(this TreeView _self)
{
List<TreeNode> result = new List<TreeNode>();
foreach (TreeNode child in _self.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
public static List<TreeNode> GetAllNodes(this TreeNode _self)
{
List<TreeNode> result = new List<TreeNode>();
result.Add(_self);
foreach (TreeNode child in _self.ChildNodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
Поскольку TreeView имеет много уровней, сделать рекурсивную функцию:
public void AddNodeAndChildNodesToList(TreeNode node)
{
listBox1.Items.Add(node.Text); // Adding current nodename to ListBox
foreach (TreeNode actualNode in node.Nodes)
{
AddNodeAndChildNodesToList(actualNode); // recursive call
}
}
Чем вызвать эту функцию для всех первых узлов уровня в TreeView:
foreach (TreeNode actualNode in treeView1.Nodes) // Begin with Nodes from TreeView
{
AddNodeAndChildNodesToList(actualNode);
}
Код с сайта C# TreeView
Если вы d не нужно, чтобы ключ узла был уникальным, просто установите все ключи узла на пустую строку (""
), затем вы можете сделать Treeview1.Nodes.Find("", true);
, чтобы вернуть все узлы в TreeView.
- 1. Получить список всех проверенных узлов и его подносов в treeview
- 2. Как получить список всех дочерних узлов в TreeView в .NET.
- 3. Как получить индекс всех узлов в TreeView?
- 4. Просмотреть список всех узлов
- 5. Список всех достижимых узлов
- 6. Печать всех узлов в методе дерева
- 7. Glassfish - Получить список всех узлов/экземпляров
- 8. Список всех дочерних узлов родительского узла в элементе управления treeview в Visual C#
- 9. Установить SelectAction для всех узлов дерева для элемента управления TreeView ASP.NET
- 10. На самом деле отмените выбор всех узлов в TreeView (.NET)
- 11. Поиск всех узлов двоичного дерева в Java
- 12. jgrapht - получить список всех пройденных узлов
- 13. найти детей на всех уровнях в питона
- 14. Получение всех загруженных узлов из дерева ExtJS
- 15. C# Получить список родительских узлов TreeView
- 16. Получить список всех элементов управления в webform
- 17. Заполнение поля данных всех узлов дерева
- 18. Kendo UI Treeview Checked - Получить текст всех проверенных узлов
- 19. C++: сумма всех значений узлов двоичного дерева
- 20. Как получить все капли на всех уровнях в контейнере?
- 21. Изменить шрифт на всех элементах управления в отчете Microsoft Access
- 22. Список всех элементов управления всех веб-страниц приложения на странице
- 23. Список всех узлов в файле XML
- 24. Как получить всех родителей дерева?
- 25. Список XPath всех узлов в C#
- 26. Список всех узлов в кластере Erlang
- 27. найти список всех узлов в ориентированном графе
- 28. Как запустить код на всех узлах дерева?
- 29. Получить список всех корневых узлов из дочернего узла в Umbraco
- 30. Стиль-inline не работает на всех элементах
Если вас устраивает ответ, было бы хорошо, если бы вы его приняли. Благодарю. – Krumelur