recorrer ejemplos dinamico c# winforms treeview treenode

c# - ejemplos - ¿Hay algún método para buscar el campo TreeNode.Text en la colección TreeView.Nodes?



treeview c# dinamico (4)

El siguiente código solo muestra los nodos que coinciden con los criterios de búsqueda.

Copia el siguiente código en el evento de búsqueda

private void tbxSearch_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { trvMenu.BeginUpdate(); if (tbxSearch.Text.Length > 0) { for (int i = trvMenu.Nodes.Count; i > 0 ; i--) { NodeFiltering(trvMenu.Nodes[i - 1], tbxSearch.Text); } } trvMenu.EndUpdate(); }

Luego crea la función de búsqueda y filtro

private bool NodeFiltering(TreeNode Nodo,string Texto) { bool resultado = false; if (Nodo.Nodes.Count == 0) { if (Nodo.Text.ToUpper().Contains(Texto.ToUpper())) { resultado = true; } else { Nodo.Remove(); } } else { for (int i = Nodo.Nodes.Count; i > 0; i--) { if (NodeFiltering(Nodo.Nodes[i - 1], Texto)) resultado = true; } if (!resultado) Nodo.Remove(); } return resultado; }

Este código es bastante bueno para crear menús de Treeview con muchos niveles.

Me gusta esto:

TreeNode[] treeNodes = treeView.Nodes.Find(searchString, true);

pero quiero que busque en el campo de text lugar del campo de name .


No tengo conocimiento de ningún método incorporado, pero puede usar LINQ

TreeNode[] treeNodes = treeView.Nodes .Cast<TreeNode>() .Where(r => r.Text == "yourText") .ToArray();


Para buscar todos los nodos de árbol (no solo los nodos secundarios directos) puede usar el método de extensión a continuación

var nodes = treeView1.FlattenTree() .Where(n => n.Text == "sometext") .ToList();

-

public static class SOExtension { public static IEnumerable<TreeNode> FlattenTree(this TreeView tv) { return FlattenTree(tv.Nodes); } public static IEnumerable<TreeNode> FlattenTree(this TreeNodeCollection coll) { return coll.Cast<TreeNode>() .Concat(coll.Cast<TreeNode>() .SelectMany(x => FlattenTree(x.Nodes))); } }


Si te entiendo correctamente (la última pregunta fue muy confusa), puedes escribir un método de búsqueda por ti mismo de la siguiente manera

public static TreeNode[] Find(this TreeNode motherNode, string findNodeText) { List<TreeNode> nodeList = new List<TreeNode>(); foreach (TreeNode childNode in motherNode.Nodes) if (childNode.Text.Equals(findNodeText, StringComparison.CurrentCulture)) nodeList.Add(childNode); return nodeList.ToArray<TreeNode>(); }

Este método puede ser utilizado como

TreeView myTreeView = new TreeView(); foreach (TreeNode node in myTreeView.Nodes) { TreeNode[] childNodes = node.Find("Text"); // Do something... }

Espero que esto ayude.