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 :

boucles pour les checkboxs


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut boucles pour les checkboxs
    Bonjour à tous,

    alors voici mon petit problème. J'ai un form avec 19 checkboxs regroupées dans un groupbox. 1 checkbox s'intitule "all" et doit me cocher les 18 checkboxs restantes, seulement j'aimerais implémenter cette action à l'aide d'une boucle for. Ca donnerait un truc dans le style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    
            For i = 2 To 19
                If CheckBox1.Checked = True Then
                    CheckBox(i).checked = True
                Else : CheckBox(i).checked = False
                End If
            Next i
    Seulement, bah ca marche pas..."checkbox ne peut pas être utilisé en tant qu'expression" qu'il me dit.

    Donc je tente les controles comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    
            For i = 2 To 19
                If CheckBox1.Checked = True Then
                    Controls("checkbox" & i).checked()= True
                Else : Controls("checkbox" & i).checked()= False
                End If
            Next i
    Je le tente de toutes les formes, ca marche pas non plus.

    Alors faute de mieux, je me la fait a la méthode bourrin, je vous l'avoue, ce n'est pas très élégant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
     
            If CheckBox1.Checked = True Then CheckBox2.Checked = True Else CheckBox2.Checked = False
            If CheckBox1.Checked = True Then CheckBox3.Checked = True Else CheckBox3.Checked = False
    ... ... ...
            If CheckBox1.Checked = True Then CheckBox19.Checked = True Else CheckBox19.Checked = False
    Donc si quelqu'un pouvait m'aider à "affiner" ce programme, j'en serais ravi.

    Cordialement

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pour ce problème, tu peux faire une recherche dans le forum, cette question revient tous les deux jours.
    Ceci étant dit, la propriété Controls de ton formulaire contient une méthode Find qui prend en paramètre le nom du controle recherché.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each ctrl as system.windows.forms.control in mongroupbox.controls
      if ctrl.name <> "celui qu'il faut pas cocher" then directcast(ctrl,checkbox).checked = la meme valeur que celui qui sert à cocher tout
    next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    AUtre méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For Each check As CheckBox In Me.Controls
                check.Checked = True 'on les coches toutes 
            Next
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut
    Merci pour vos réponses rapides,
    J'avais préalablement épluché le forum et testé pas mal de solutions la seule que j'arrive à faire fonctionner est celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Each Check As CheckBox In Me.Controls
                Check.Checked = True
            Next
    Merci Aspic

    Le problème, c'est que ce code ne marche que lorsque le form ne contient que des checkboxs...dès lors que le form contient d'autres outils tels que les labels, groupboxs, etc...cela ne fonctionne plus même en remplacant Me.controls par groupbox3.control.
    (groupbox3 étant celui contenant mes 19 checkboxs).
    Le code me renvoie Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.Label' en type 'System.Windows.Forms.CheckBox'.
    L'exception invalidcastexception n'a pas été gerée


    Et mon form est truffé de label et de groupboxs qui s'affichent en fonction du choix effectué dans la liste déroulante principale.

    Ensuite avec celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For Each ctrl As System.Windows.Forms.Control In GroupBox3.Controls
                If ctrl.Name <> "checkbox1" Then DirectCast(ctrl, CheckBox).Checked = True
            Next
    Merci sperot51

    Impossible de le faire marcher, toujours la même erreur. La seule méthode est de tout supprimer et de ne garder que le groupbox 3 contenant les checkboxs. Là ca fonctionne, un petit avancement déjà, il rentre dans la groupbox.

    Sinon j'ai commencer a regarder la fonction control.find (merci pour l'astuce saumonagile) mais je ne la comprends pas tout à fait encore.

    En fait, ma question pour les boucles ne se vouait pas uniquement à cocher les checkboxs quand je coche "all". Je voulais par la suite faire un scan de mes checkboxs et (par ex) pour les checkbox 1 a 12 si elles sont cochées alors x=x+10 et pour les checkbox 12 a 19 si elles sont cochées alors x=x+5

    Donc je suis obligé de refaire le code "bourrin" a chaque fois. Encore là ca va a peu près étant donné que je n'ai que 19 checkbox mais j'ai du mal a imaginer si il y en avait 200...

    En tout cas, même si mon problème n'est pas encore résolu, merci beaucoup pour votre réactivité, cela me permet d'avancer et de découvrir de nouvelles fonctions.

    Et si vous avez d'autres idées (même farfelues, je prends).

    Cordialement

    Aurèl

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    tu as pas précisé qu'il y avait d'autres choses sur le groupbox, et ne mode fainéant je fais au plus court

    rajoute un test du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not typeof ctrl is checkbox then continue for
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [XL-2003] Gros problème sur les boucles avec les checkbox
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/05/2010, 15h31
  2. Réponses: 1
    Dernier message: 30/11/2005, 15h57
  3. [JMeter] Problème avec la boucle infinie pour les tests
    Par zegreg dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/10/2005, 12h41

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