Comment obtenir tous les parents (à la racine), les nœuds sélectionnés dans le contrôle TreeView?
Si j'ai un TreeView (myTreeview),comment puis-je obtenir une liste de tous les nœuds parents (père, mère, parents de parents ect.) du nœud sélectionné?
J'avais recommandé que vous créez un jeu de votre propre arbre aides, par exemple, le suivant est à votre problème:
publicstaticclassTreeHelpers{publicstaticIEnumerable<TItem>GetAncestors<TItem>(TItem item,Func<TItem,TItem> getParentFunc){if(getParentFunc ==null){thrownewArgumentNullException("getParentFunc");}if(ReferenceEquals(item,null)) yield break;for(TItem curItem = getParentFunc(item);!ReferenceEquals(curItem,null); curItem = getParentFunc(curItem)){
yield return curItem;}}//TODO: Add other methods, for example for 'prefix' children recurence enumeration}
Et exemple d'utilisation (dans ce contexte):
IList<TreeNode> ancestorList =TreeHelpers.GetAncestors(node, x => x.Parent).ToList();
Pourquoi est-ce mieux que d'utiliser une liste<>.Ajouter()? - parce que nous pouvons utiliser paresseux LINQ fonctions, telles que l' .FirstOrDefault(x => ...)
P. S.: 'cours' de l'élément dans le résultat énumérable, utilisez TItem curItem = item, au lieu de TItem curItem = getParentFunc(item)
Si vous souhaitez que les objets réels, utilisez le TreeNode.Parent propriété de manière récursive jusqu'à ce que vous atteindre la racine. Quelque chose comme:
privatevoidGetPathToRoot(TreeNode node,List<TreeNode> path){if(node ==null)return;//previous node was the root.else{
path.add(node);GetPathToRoot(node.Parent, path);}}
Je Pense que vous avez besoin de prendre un Tableau de Nœuds
List<TreeNode> resultNodes =newList<TreeNode>()privatevoidGetNodesToRoot(TreeNode node){if(node ==null)return;//previous node was the root.else{
resultNodes.add(node);GetNodesToRoot(node.Parent);}}
Ce que l'enfer l'homme? Vous venez de copier mon code. hey, n'en déplaise...je voulais simplement dire qu'u n'ont pas besoin de la deuxième paramètre
J'avais recommandé que vous créez un jeu de votre propre arbre aides, par exemple, le suivant est à votre problème:
Et exemple d'utilisation (dans ce contexte):
Pourquoi est-ce mieux que d'utiliser une liste<>.Ajouter()? - parce que nous pouvons utiliser paresseux LINQ fonctions, telles que l' .FirstOrDefault(x => ...)
P. S.: 'cours' de l'élément dans le résultat énumérable, utilisez
TItem curItem = item
, au lieu deTItem curItem = getParentFunc(item)
OriginalL'auteur Alexander Mavrinsky
Si vous souhaitez que les objets réels, utilisez le TreeNode.Parent propriété de manière récursive jusqu'à ce que vous atteindre la racine. Quelque chose comme:
OriginalL'auteur Tudor
Je Pense que vous avez besoin de prendre un Tableau de Nœuds
hey, n'en déplaise...je voulais simplement dire qu'u n'ont pas besoin de la deuxième paramètre
OriginalL'auteur Saurabh Santhosh