Voici une petite méthode d’extension qui permet d’effectuer une recherche de manière récursive dans un treeview en lui spécifiant un prédicat :
public static class TreeNodeExtension { public static IEnumerable<TreeNode> FindNodes(this TreeNodeCollection nodesCollection, Func<TreeNode, bool> predicate) { var nodes = nodesCollection.Cast<TreeNode>(); return nodes.SelectMany(n => FindNodes(n.Nodes, predicate).Union(nodes.Where(n2 => predicate(n2)))); } }
return from n in nodes from child in n.Nodes where predicate(child) select child;
Je voudrai récupérer la liste des TreeNode de type FileNode et qui sont sélectionnés :
var checkedFilesNode = treeView1.Nodes.FindNodes(n => n is FileNode && n.Checked == true);
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.