IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Déployer les noeuds d'un arbre / Tous ou ceux de niveau(x) déterminé(s)


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut Déployer les noeuds d'un arbre / Tous ou ceux de niveau(x) déterminé(s)
    Chers (et chères ?)

    Je n'ai pas trouvé dans les FAQ C#, Articles C# et Sources C# de 'developpez.com' un article, un message ... concernant une fonction qui me semble pourtant d'utilité générale :
    Lors du chargement d'un objet de classe TreeView, comment faire pour que tous les noeuds de la structure arborescente - ou ceux d'un niveau prédéterminé - soient déployés ou fermés, en une commande ?

    Connaîtriez-vous l'URL d'un exemple disponible sur le web ?

    Merci d'avance.

    P.S. Je me suis trompé de forum. J'aurais dû poster cette question dans Forum des professionnels en informatique > Dotnet > Développement Windows > Windows Forms . Comment puis-je la déplacer ?
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  2. #2
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    J'ai déjà eu ce soucis là et j'ai du utiliser une fonction maison.

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonjour,

    Alors j'avais déjà fait quelque recherches à ce sujet là dans un projet en VB.Net en utilisant les possibilités récentes (Linq, Méthodes d'extension) j'ai fait une petite conversion en C# et d'après mes tests cela semble fonctionner (après à voir comment toi tu peux t'en servir ^^)
    En l'état, il s'agit de deux méthodes d'extension, la première porte sur le TreeView et permet d'effectuer une opération ("paramétrable") sur chaque TreeNode correspondant à la condition spécifiée ("paramétrable" également); la deuxième est en fait une méthode d'extension portant sur le TreeNode appelée par la première pour retrouver récursivement les sous-noeuds

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public static class TreeViewExtensions
    {
        public static void ExecuteAction(this TreeView tv, Func<TreeNode, bool> condition, Action<TreeNode> action)
        {
            foreach (TreeNode node in tv.Nodes)
            {
                if (condition(node))
                    action(node);
                else
                    foreach (TreeNode desc in Descendants(node).Where(condition))
                        action(desc);
            }
        }
     
        private static IEnumerable<TreeNode> Descendants(this TreeNode current)
        {
            if (current.Nodes.Count > 0)
                foreach (TreeNode child in current.Nodes)
                {
                    yield return child;
                    foreach (TreeNode desc in Descendants(child))
                        yield return desc;
                }
        }
    }

    Bon il manque des tests de vérification (passage de paramètre "null" par exemple) et puis il faudra sûrement l'adapter...
    Pour finir un exemple d'utilisation, pour déployer les noeuds du niveau correspondant à la valeur d'une TrackBar:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        //D'abord on replie tout
        treeView1.CollapseAll();
        //Ensuite on déploie ceux souhaités
        treeView1.ExecuteAction((tn => tn.Level == trackBar1.Value), (tn => tn.Expand()));
    }

    En espérant que cela soit utile
    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Woww Sehnsucht
    Ta réponse est super et d'un niveau surprenant. D'utilité générale.
    Il me semble que je vais encore me tromper de forum
    Oui, ta solution devrait me convenir, moyennant une petite adaptation et un test.

    Question subsidiaire : Saurais-tu par hasard quels (nouveaux) outils avancés en Java je devrais découvrir pour réaliser ces méthodes d'extension en Java aussi ? (J'aime beaucoup Java)

    Sempiternels, mes remerciements

    PS : Mes questions non encore répondues sur Developpez.com :
    - http://www.developpez.net/forums/d93...p/#post5276970
    - http://www.developpez.net/forums/d93...s/#post5284719
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

Discussions similaires

  1. [TreeGrid/Ajax] Charger dynamiquement les noeuds de l'arbre
    Par verbose dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 20/03/2013, 11h41
  2. Comparer les noeuds de deux arbres.
    Par p1xl_01 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 04/02/2010, 14h00
  3. [C#]Comment avoir les fils d un noeud dans 1 arbre
    Par wodel dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/04/2006, 13h42
  4. [JTree] Suppresion de tous les noeuds sauf la racine
    Par nicolaskarp dans le forum Composants
    Réponses: 3
    Dernier message: 29/04/2005, 12h53
  5. Réponses: 3
    Dernier message: 27/07/2004, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo