7
votes

Comment obtenir tous les parents (jusqu'à racine) Nœuds pour la sélection de l'arbreView?

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é?


0 commentaires

4 Réponses :


3
votes

Si vous voulez les objets réels, utilisez le Treenode.parent propriété récursive jusqu'à atteindre la racine. Quelque chose comme: xxx


1 commentaires

Merci! C'était très utile. Les méthodes récursives sont très récursives;)



8
votes

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();


0 commentaires

-2
votes

Je pense que vous devez prendre une gamme de nœuds xxx


1 commentaires

hey aucune infraction ... je veux juste dire que vous n'avez pas besoin du deuxième paramètre



1
votes

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);


0 commentaires