Si j'ai une TreeView (MyTreeeView), comment puis-je obtenir une liste de tous les nœuds parents (parent, parents des parents ect.) de noeud sélectionné? p>
4 Réponses :
Si vous voulez les objets réels, utilisez le Treenode.parent propriété récursive jusqu'à atteindre la racine. Quelque chose comme:
Merci! C'était très utile. Les méthodes récursives sont très récursives;)
Je vous recommanderais de créer un ensemble de vos propres aides d'arbres, par exemple, la suivante est pour votre problème:
IList<TreeNode> ancestorList = TreeHelpers.GetAncestors(node, x => x.Parent).ToList();
Je pense que vous devez prendre une gamme de nœuds
hey aucune infraction ... je veux juste dire que vous n'avez pas besoin du deuxième paramètre
La réponse d'Alexander Mavrinsky est vraiment utile, mais mon approche a de nombreux changements. Mon code est plus court et plus clair non seulement dans la méthode, mais également dans les sites d'appels (en spécifiant ses génériques).
public static IEnumerable<T> GetAncestors<T>(T item, Func<T, T> getParent) { if (item == null) yield break; while ((item = getParent(item)) != null) yield return item; } public static IEnumerable<TreeNode> GetAncestors(this TreeNode node) => GetAncestors(node, x => x.Parent); public static IEnumerable<Control> GetAncestors(this Control control) => GetAncestors(control, x => x.Parent);