¿Cómo puedo obtener una lista de todos los nodos de árbol (en todos los niveles) en un control TreeView
?Obtenga una lista de todos los nodos de árbol (en todos los niveles) en TreeView Controls
Respuesta
Suponiendo que tiene un árbol con un nodo raíz, el siguiente código siempre recorrerá los nodos del árbol hasta lo más profundo, luego retrocederá un nivel, y así sucesivamente. Imprimirá el texto de cada nodo. (No comprobado desde la parte superior de mi cabeza)
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);
}
}
actualización a la respuesta de Krumelur (reemplace 2 primeras líneas de su/su solución con esto):
foreach (var node in oYourTreeView.Nodes)
{
PrintNodesRecursive(node);
}
Sí, entonces escupirá todos los subárboles si hay varias raíces. Pero realmente: un árbol con varios nodos es muy raro en la naturaleza :-) Oh, y es "suyo";) – Krumelur
De hecho, en la naturaleza esto es un phaenommena bastante común :) En la programación puedo imaginar algunos escenarios donde es útil. Por ejemplo: treeview que contiene los departamentos de una empresa, cada uno con subdepartamentos y así sucesivamente. Probablemente no tengas ningún superdepartamento. – dzendras
Tienes razón. Ajusté mi respuesta. Fue un error tipográfico – Krumelur
enfoque perezoso LINQ, en caso de que Está buscando algo como esto:
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;
}
Puede utilizar dos métodos de extensión recursiva. Usted puede llamar myTreeView.GetAllNodes()
o 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;
}
Debido TreeView tiene muchos niveles, hacer la función recursiva:
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
}
}
de llamar esta función para todos los primeros nodos de nivel en TreeView:
foreach (TreeNode actualNode in treeView1.Nodes) // Begin with Nodes from TreeView
{
AddNodeAndChildNodesToList(actualNode);
}
El código es del sitio C# TreeView
Si usted d no es necesario que la clave del nodo sea única, simplemente configure todas las claves del nodo en una cadena vacía (""
), luego puede hacer un Treeview1.Nodes.Find("", true);
para devolver todos los nodos dentro de una TreeView.
- 1. Cómo obtener una lista de todos los nodos secundarios en TreeView en .NET
- 2. Enumerar todos los nodos secundarios de un nodo principal en un control treeview en Visual C#
- 3. ASP.NET | Autenticación de formularios | Obtenga TODOS los usuarios iniciados (lista de todos los usuarios o conteo)
- 4. Ordena todos los niveles de expresión
- 5. Eliminar todos los nodos en jsTree
- 6. ¿Cómo expandir automáticamente todos los nodos TTreeView?
- 7. ¿Cómo abro todos los nodos en jquery Jstree?
- 8. ¿Cómo expandir todos los nodos de una vista de árbol de WPF en el código?
- 9. Ruta no cíclica a todos los nodos
- 10. Buscar todos los nodos de texto
- 11. todos los elementos en una lista
- 12. mongo DB - Todos los nodos secundarios
- 13. Obtener los identificadores de todos los objetos en una lista
- 14. Perl, obtenga todos los valores hash
- 15. Obtenga todos los documentos de diseño en CouchDB
- 16. Obtenga todos los tipos concretos de ninject
- 17. Obtenga una lista de todos los servidores de impresión en el dominio en C#
- 18. Componer una lista de todos los pares
- 19. Eliminar todos los elementos de una lista
- 20. Mostrar todos los nodos y las relaciones
- 21. NSOutlineView - Expandir automáticamente todos los nodos
- 22. Obtenga todos los valores de una lista desplegable en una matriz usando Javascript
- 23. ¿Cómo seleccionar todos los nodos raíz o todos los secundarios en VirtualStringTree?
- 24. Buscar todos los nodos de texto en la página HTML
- 25. NSLocale: obtenga todos los idiomas disponibles
- 26. Obtenga todos los parámetros después de la acción en Zend?
- 27. Obtenga una lista de todos los trabajos que se ejecutan actualmente en un clúster con Quartz
- 28. ¿Eliminar todos los nodos secundarios de un padre?
- 29. método eficiente para encontrar KNN de todos los nodos de un árbol KD-
- 30. Seleccionar todos los elementos de una lista en hibernación
Si está satisfecho con una respuesta, sería genial si la acepta. Gracias. – Krumelur