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

Windows Forms Discussion :

Recuperer les enfants d'un noeud parent dans un treeview


Sujet :

Windows Forms

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut Recuperer les enfants d'un noeud parent dans un treeview
    Bonjour, après plusieurs recherche sur le forum, msdn et google je ne parvient toujours pas a récupérer les enfants d'un noeud parent dans mon treeview.
    Ce que je cherche a faire et que lorsque je check le noeud pere dans mon treeview les noeuds enfants sont aussi checké.
    Est ce que quelqu'un aurait un exemple svp?
    Merci

    voici ce que j'ai mais qui ne fonctionne pas j'ai une erreur de type stackoverflow.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                TreeNodeCollection nodesC;
     
                    nodesC = treeView1.Nodes;
                    foreach (TreeNode tn in nodesC)
                    {
                        tn.Checked = true;
                    }
     
     
            }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    j'ai trouvé ce code dans MSDN.
    je le post (ne met pas a resolu la discussion) en attendant vos remarques.
    Code : 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
    27
    28
    29
    30
     
    // Updates all child tree nodes recursively.
            private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
            {
                foreach (TreeNode node in treeNode.Nodes)
                {
                    node.Checked = nodeChecked;
                    if (node.Nodes.Count > 0)
                    {
                        // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
                        this.CheckAllChildNodes(node, nodeChecked);
                    }
                }
            }
     
            // NOTE   This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
            // After a tree node's Checked property is changed, all its child nodes are updated to the same value.
            private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                // The code only executes if the user caused the checked state to change.
                if (e.Action != TreeViewAction.Unknown)
                {
                    if (e.Node.Nodes.Count > 0)
                    {
                        /* Calls the CheckAllChildNodes method, passing in the current 
                        Checked value of the TreeNode whose checked state changed. */
                        this.CheckAllChildNodes(e.Node, e.Node.Checked);
                    }
                }
            }
    le lien MSDN si ca interesse quelqu'un : http://msdn.microsoft.com/fr-fr/libr...ck(VS.80).aspx

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le problème dans ton premier code est que tu travailles toujours sur les noeuds de premier niveau (treeView1.Nodes), donc ta procédure fait toujours la même chose, de façon récursive, jusqu'à ce que la pile déborde... (StackOverflow)

    Alors qu'il faudrait travailler seulement sur les noeuds qui sont sous le noeud concerné par l'évènement (e.Node) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                TreeNodeCollection nodesC;
     
                    nodesC = e.Node.Nodes;
                    foreach (TreeNode tn in nodesC)
                    {
                        tn.Checked = true;
                    }
     
            }
    Au passage, n'oublie pas que l'évènement se produira aussi si la CheckBox est décochée... dans ce cas il faudrait plutôt faire çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    tn.Checked = e.Node.Checked;
    ...
    De façon à cocher ou décocher les noeuds enfants


    Sinon le code indiqué dans la doc me semble pas mal... c'est plus sûr, à mon avis, de parcourir les noeuds explicitement que de compter sur les évènements pour assurer la récursivité.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    ok merci de tes explications.
    je n'arrive pas a récupérer uniquement les nœuds qui sont checkés??
    j'explique ce que je souhaite faire :
    j'ai un treeview (2 niveaux pour le moment).j'ai réussi a faire en sorte que lorsque je check le nœud père les enfants sont checké.
    Ensuite, j'ai un autre bouton, et je souhaiterai que sur un l'event click récupérer la liste des nœuds checkés ( chaque nœud enfant a comme texte nom prénom (mail) ) et creer un string qui contient la valeur 'mail' concatené avec comme separateur ';'.
    Ce que je ne'ai pas reussi a faire et tout simplement de recuperer la liste des noeuds enfants checké.



    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben il suffit de parcourir la liste des noeuds, et de prendre seulement ceux qui sont checkés... je vois pas exactement quel est ton problème

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    ce que je n'arrive pas a faire c'est de parcourir les noeuds de seconds niveau ....
    je sais pourquoi ce la ne marche pas mais je ne sais pas comment faire pour qu'il marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TreeNodeCollection tc = treeView2.Nodes;//recup du 1er niveau uniqement !
                foreach (TreeNode tn in tc)
                {
                    if (tn.Checked == true)
                    {
                        s = s + ";" + tn.Text;
                    }
                }
                MessageBox.Show(s);

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    j'ai modifié mon code de cette maniere je ne sais pas si c'est ce qui ya de mieux..
    mais ca a l'air de marché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                TreeNodeCollection tc = treeView2.Nodes;
                foreach (TreeNode tn in tc)
                {
                    TreeNodeCollection tc2 = tn.Nodes;
                    foreach (TreeNode tn2 in tc2)
                    {
                        if (tn2.Checked == true)
                        {
                            sMailing = sMailing + ";" + tn2.Text;
                        }
                    }
                }
                MessageBox.Show(sMailing);

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ça me parait pas mal

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    merci merci
    j'adore ce FORUM !!
    Avant j'étais plutot JAVA mais depuis que je me suis mis au C# j'adore !
    et ce grâce a vous (et tomlev particulièrement)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Retrouver un noeud parent dans un Treeview
    Par cobaye13 dans le forum Access
    Réponses: 2
    Dernier message: 19/04/2015, 09h53
  2. recuperer les enfants d' un noeud (fils d' un autre parent)
    Par legide dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2009, 12h20
  3. selectioner les enfants d un noeud contenu ds un paramètre
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/06/2005, 19h30
  4. Réponses: 3
    Dernier message: 05/05/2004, 00h39
  5. [JTree]noeud parent dans un jtree
    Par wassimb dans le forum Composants
    Réponses: 5
    Dernier message: 22/03/2004, 14h06

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