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 :

[VB2005] Treeview et Checkboxes


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut [VB2005] Treeview et Checkboxes
    Bonjour,

    Je voudrais savoir s'il existe un moyen pour savoir si tous les noeuds frères sont cochés ou s'ils sont tous décochés afin de cocher ou décocher le noeud parent.

    Merci

    Ludo

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    Tu voudrais savoir en fait si quand tu coches un noeud parent les objets enfants sont cochés (comme dans les installers d'application par exemple) ou à l'inverse ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Les 2 en fait. Tu as eu raison de poser cette question ça complète la mienne.

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    Voilà j'ai tester et j'ai fais ça:

    1- Un TreeView avec comme propriétés d'activées
    • CheckBoxes = True
    • FullRowSelect = True
    2- Cette méthode de créer "AfterCheck"

    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
    31
    32
    33
    34
    35
    36
    Private Sub TreeView1_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
            'On désactive temporairement le TreeView
            CType(sender, TreeView).Enabled = False
            'On enlève l'évènement du checked pour éviter la boucle infinie
            RemoveHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
            'Si le Noeud coché n'a pas de Noeud Parent ....
            If e.Node.Parent Is Nothing Then
                'Mettre tous ses noeuds enfants dans le même état que lui (coché ou décoché)
                For Each _Noeud As TreeNode In e.Node.Nodes
                    _Noeud.Checked = e.Node.Checked
                Next
            'Sinon ....
            Else
                'On compte le nombre de noeuds cochées
                Dim NoeudsCoches As Integer = 0
                For Each _Noeud As TreeNode In e.Node.Parent.Nodes
                    If _Noeud.Checked Then
                        NoeudsCoches += 1
                    End If
                Next
                'Si le nombre de noeuds cochés correspond au nombres de noeuds enfants du parent alors ...
                If NoeudsCoches = e.Node.Parent.Nodes.Count Then
                    'On coche le noeud parent
                    e.Node.Parent.Checked = True
                'Sinon si le nombre est inférieur au nombre de noeuds enfants du parent alors ...
                ElseIf NoeudsCoches < e.Node.Parent.Nodes.Count Then
                    'On décoche le noeud parent
                    e.Node.Parent.Checked = False
                End If
            End If
            'On remet l'évènement du checked sur le TreeView
            AddHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
            'On réactive le TreeView
            CType(sender, TreeView).Enabled = True
        End Sub
    Voilà j'ai testé et cela me paraît satisfaisant. Le seul souci est que si tu va trop vite dans le cochage / décochage il se peut que le noeud parent ne fasse pas l'effet souhaité. Je n'ai pas encore trouvé la solution, j'ai essayé en désactivant le treeview mais ça n'a pas l'air de fonctionner.

    Voilà si tu trouves fais le savoir ça pourrait me servir un jour

    Bon développement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Merci beaucoup D4rkTiger !

    Par contre j'ai un nouveau problème car j'ai essayé d'adapter ton code de manière récursive mais je bloque sur l'appel récursif. Si tu as une solution, n'hésite pas...

    Merci

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
        Private Sub TreeView1_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
            'On désactive temporairement le TreeView
            CType(sender, TreeView).Enabled = False
            'On enlève l'évènement du checked pour éviter la boucle infinie
            RemoveHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
            CocheDecocheNoeud(e)
            'On remet l'évènement du checked sur le TreeView
            AddHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
            'On réactive le TreeView
            CType(sender, TreeView).Enabled = True
        End Sub
     
        Public Sub CocheDecocheNoeud(ByVal e As System.Windows.Forms.TreeViewEventArgs)
            'Si le Noeud coché n'a pas de Noeud Parent ....
            'If e.Node.Parent Is Nothing Then
            'Mettre tous ses noeuds enfants dans le même état que lui (coché ou décoché)
            For Each _Noeud As TreeNode In e.Node.Nodes
                _Noeud.Checked = e.Node.Checked
            Next
            'Sinon ....
            'Else
            If Not (e.Node.Parent Is Nothing) Then
                'On compte le nombre de noeuds cochées
                Dim NoeudsCoches As Integer = 0
                For Each _Noeud As TreeNode In e.Node.Parent.Nodes
                    If _Noeud.Checked Then
                        NoeudsCoches += 1
                    End If
                Next
                'Si le nombre de noeuds cochés correspond au nombres de noeuds enfants du parent alors ...
                If NoeudsCoches = e.Node.Parent.Nodes.Count Then
                    'On coche le noeud parent
                    e.Node.Parent.Checked = True
                    'Sinon si le nombre est inférieur au nombre de noeuds enfants du parent alors ...
                ElseIf NoeudsCoches < e.Node.Parent.Nodes.Count Then
                    'On décoche le noeud parent
                    e.Node.Parent.Checked = False
                End If
            End If
            CocheDecocheNoeud(e.Node.Parent.Nodes) <== c'est là que je bloque :( 
        End Sub

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    Je ne comprends pas pourquoi tu fais cet appel récursif à la fin de ta procédure (tu crées une boucle infine à faire ça ?)

    C'est ce que tu cherches ou bien tu cherches autre chose ?

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

Discussions similaires

  1. [VBA-Excel] Treeview et Checkboxes
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2007, 17h37
  2. vb.net : treeview avec checkbox
    Par 1coni dans le forum Windows Forms
    Réponses: 11
    Dernier message: 31/05/2006, 13h18
  3. [C#] TreeView avec CheckBox à certain niveaux
    Par Maxsin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/04/2006, 16h29
  4. TreeView et checkbox
    Par BigBenQ dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/08/2005, 08h27
  5. [C#] TreeView avec CheckBox "indeterminate"
    Par padumeur dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/01/2005, 20h53

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