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 :

Problème récuperation et affichage valeur checkbox [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Problème récuperation et affichage valeur checkbox
    Bonjour, je suis débutant en C#, j'ai un projet à réaliser pour mes études mais j'ai quelques soucis.
    Voici mon principal problème :

    J'aimerais récupérer les valeurs d'une checkbox ( true/false ) et les insérer dans un fichier texte, mon problème survient dans les lignes. Je m'explique, je récupère la valeur de ma première checkbox, elle est insérer dans la première ligne de mon fichier texte, mais lors de la récupération de la valeur de la 2eme checkbox, cette dernière s’insère également en première ligne, a la place donc de la valeur de la 1ere checkbox. J'ai réussit ( en bidouillant quelque chose de pas pro du tout) à l’insérer à la 2em ligne, mais le problème survient à la valeur de la 3em checkbox etc etc.. Le problème doit donc se résoudre à la 1ere checkbox.
    Etant tout nouveau en C#, je n'utilise peut-être (surement) pas la bonne méthode. Je vous met donc mon code.

    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
    private void Test1_CheckedChanged(object sender, EventArgs e)
            {
                if (Test1.Checked == true)
                {
                    string[] lines = { "TRUE" };
                    System.IO.File.WriteAllLines((openFileDialog1.FileName), lines);
     
                }
                else
                {            
                    string[] lines = { "FALSE" };
                    System.IO.File.WriteAllLines((openFileDialog1.FileName), lines);                
                }
            }
     
    private void Test2_CheckedChanged(object sender, EventArgs e)
     
            {
     
                if (Test2.Checked == true)
                {
     
                    string[] lines = { "TRUE" };
                    System.IO.File.AppendAllLines((openFileDialog1.FileName), lines);
     
                }
                else
                {
     
                    string[] lines = { "FALSE" };
                    System.IO.File.WriteAllLines((openFileDialog1.FileName), lines);
     
                }
     
            }
    Si je n'ai pas été assez précis n’hésitez pas à me poser vos questions. C'est un projet qui me tient vraiment à coeur.
    Merci d'avance de votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Es-tu vraiment obligé de modifier le fichier à chaque changement d'état de la check box ?

    Si oui, je te conseille d'avoir une fonction de génération du fichier et cette fonction regarder toutes les checkbox et ajoutera
    la ligne qui va bien à chaque fois dans le fichier qui sera recrée à nouveau.
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Non je ne suis pas obligé bien au contraire, le "must" pour moi serait de pouvoir récupérer toutes les valeurs une fois que l'utilisateur ai finit de remplir le formulaire (je ne veut pas savoir si il a coché/décoché puis re-coché la checkbox, la dernière valeur seulement m’intéresse). Sachant que j'ai une bonne dizaine de checkbox, j'aimerais récupérer les valeurs de ces dernières et les écrire dans un fichier CSV les unes en dessous des autres.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Dans ce cas, il vaut mieux que tu ajoutes un bouton "validation" et sur le click du bouton, tu fais l’ensemble des taches suivantes:

    Tu crées une variable de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string[] sMesValeurs;
    tu analyses tous tes checkbox, et tu ajoutes FALSE ou TRUE selon tes besoins par
    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
     
    if (checkbox_name1.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
     
    if (checkbox_name2.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
    .
    .
    .
    if (checkbox_nameXXXX.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
    Et tu écris ton fichier par ta ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.IO.File.WriteAllLines((openFileDialog1.FileName), sMesValeurs);
    Ce sera mieux, pas parfait. Loin de là, mais déjà bien mieux

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup de votre aide je ne connaissais pas cette "méthode" la (qui est surement la solution d’ailleurs)! Par contre il me faut une directive using pour le .Add ? Car il m'est refusé !

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Le plus joli serait de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List<string> mesValeurs = new List<string>();
     
    foreach(Control cnt in controls)
    {
       if(cnt is checkbox)
       {
          Chechbox c = cnt as checkBox;
          mesValeurs.Add(c.Checked?"TRUE":"FALSE");
       }
    }
    Après, c'est juste que ça évite de devoir nommer toutes les checkBox et que si t'en ajoutes, supprimes, le code n'aura pas à bouger...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci theMonz31 mais ce code je l'entre dans le click button ? A la place de la série de if ?
    Et je me répète mais ya-t-il une directive using pour le .Add (cité par jpbelmondo59) car le .Add m'est refusé.

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Oups petit erreur de ma part... c'est pas un tableau string[], mais une liste qu'il faut utiliser, ce qui explique ton problème de .Add
    donc, le code donne
    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
     
    // déclaration
    List<string> sMesValeurs = new List<string>();
     
    //analyse
    if (checkbox_name1.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
     
    if (checkbox_name2.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
    .
    .
    .
    if (checkbox_nameXXXX.Checked)
       sMesValeurs.Add("TRUE")
    else
       sMesValeurs.Add("FALSE")
     
    // enregistrement (si tu veux tu peux utiliser aussi le using System.IO; pour simplifier ta ligne ci-dessous
    System.IO.File.WriteAllLines((openFileDialog1.FileName), sMesValeurs);
    mais la méthode de theMonz31 est plus moderne, plus courte et fonctionne aussi à condition que tu n'as pas une case à cocher qui ne dois pas être utilisée dans ton formulaire, car tu enregistre toutes les controls de type CheckBox...

    D'ailleurs j'ignore comme s'appelle ce type de code , si theMonz31 peut me l'indiquer ce serait sympa à lui

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci jpbelmondo59 ta technique fonctionne parfaitement !
    J'ai essayer la méthode de theMonz31 mais je ne sais pas trop comment l'utiliser et comment elle fonctionne. J'ai mis son code à la place de la série de if mais rien ne se produit. Voici le code :
    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
            private void buttonValider_Click(object sender, EventArgs e)
            {
                List<string> sMesValeurs = new List<string>();
     
               foreach(Control cnt in Controls)
    {
               if(cnt is CheckBox)
                 {
                      CheckBox c = cnt as CheckBox;
                      sMesValeurs.Add(c.Checked?"TRUE":"FALSE");
                 }
    }
     
                System.IO.File.WriteAllLines((openFileDialog1.FileName), sMesValeurs);
            }

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Bien content que mon code fonctionne et te convient

    Par contre j'avoue que je vois pas ce qui pose soucis dans le code en version theMonz31 que tu as fais... ça me semble correct. Il aura peut être une autre réponse à fournir que la mienne

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut, je parie sur le fait que les checkboxes ne sont pas "posées" directement sur la Form. C'est pour cela que le code de Montz31 ne fonctionne pas. Elles ne seraient pas dans un GroupBox par exemple ?

    Bref il te faut utiliser une méthode récursive (qui s'appelle elle même). Ainsi pour chaque contrôle de ta form, en commencant par la form elle même, le code va regarder tous les contrôles qu'il contient. S'il y a des checkboxes il ajoute le nom et la valeur de la chk à une liste globale passée en paramètre.
    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
     
    private void Button1_Click(object sender, EventArgs e)
    		{
    			List<string> list = new List<string>();
    			GetCheckBoxValues(this, list);
    			File.WriteAllLines("xxx", list.ToArray());
    		}
     
    		private static void GetCheckBoxValues(Control pControl, List<string> pList)
    		{
    			foreach (Control ctrl in pControl.Controls)
    			{
    				if (ctrl is CheckBox)
    				{
    					var chk = ctrl as CheckBox;
    					pList.Add(string.Format("{0} = {1}", chk.Name, chk.Checked));
    				}
    				else
    				{
    					GetCheckBoxValues(ctrl, pList);
    				}
    			}
    		}
    A+

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    et pour info, ma "méthode" n'a pas de nom... (où alors je fais de la prose sans le savoir, comme M.Jourdain )


    C'est juste une moyen pratique de découvrir ce que l'on a dans son IHM.

    Et oui, agir de façon récursive est une bonne solution...

    après, au lieu de parcourir controls, on pourrait aussi avoir une liste de checkbox et avoir une fonction d'initialisation de la form qui remplit
    cette liste avec les combo à utiliser... (ca demande un poil plus de code mais c'est plus simple que le récursif et ne dépend pas, du coup, de l'agencement
    des checkbox (ainsi, si les checkbox sont dans un panel de panel, de panel.. on galèrerait moins avec la liste de checkbox qu'avec le récursif !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci lead8209 cette méthode fonctionne parfaitement ! Ceci dit, mes CheckBox sont posées directement sur la Form, je n'utilise pas de GroupBox. Donc étrange que la méthode de theMonz31 ne fonctionne pas !
    Euh par contre petite parenthèse, il y a un moyen d'afficher (les valeurs des CheckBox )dans un ordre précis ? Car elles s'affichent dans un ordre que je ne désire pas.

  14. #14
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Afin de savoir à quoi correspond chaque élément de la liste, on préférera un dictionnaire associant le nom de la combobox et son état.
    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
    Dictionary<string,bool> mesNomsValeurs = new Dictionary<string,bool>();
     
    foreach(Control cnt in controls)
    {
       if(cnt is checkbox)
       {
          Chechbox c = cnt as checkBox;
          mesNomsValeurs.Add(c.Name,c.Checked);
       }
    }
    
    bool IsChecked ;
    mesNomsValeurs.TryGetValue("comboBox1",out IsChecked) ;
    Console.WriteLine("comboBox1",IsChecked?"TRUE":"FALSE") ;
    ...
    )
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci de ta réponse Graffito mais je n'utilise pas de combobox, j'utilise uniquement des checkbox, cela ne change rien ?

  16. #16
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    je n'utilise pas de combobox, j'utilise uniquement des checkbox, cela ne change rien ?
    Non, j'ai juste pris dans l'exemple des noms de controls inappropriés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mesNomsValeurs.TryGetValue("checkBox1",out IsChecked) ;
    Console.WriteLine("checkBox1",IsChecked?"TRUE":"FALSE") ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Ah oui c'est bon effectivement merci ! Merci à tous de votre aide

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

Discussions similaires

  1. [Débutant] Problème récupération et affichage valeur TextBox
    Par BatFUT dans le forum C#
    Réponses: 3
    Dernier message: 22/06/2015, 19h16
  2. Problème ComboBox et affichage valeur
    Par jackborogar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/07/2012, 14h24
  3. Réponses: 0
    Dernier message: 22/10/2009, 10h55
  4. affichage valeur checkbox VB.net
    Par urbanspike dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/06/2009, 09h55
  5. Problème récuperation de valeur JComboBox
    Par thibs888 dans le forum AWT/Swing
    Réponses: 17
    Dernier message: 02/08/2007, 12h53

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