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 :

c# enregistrement et lecture des textbox et checkbox


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut c# enregistrement et lecture des textbox et checkbox
    Bonjour,

    J'ai un problème que je n'arrive pas à trouver sur le net sur comment enregistrer 10 TextBox et 20 CheckBox dans un fichier et faire l'opération inverse(lecture du fichier).
    Est-ce que quelqu'un pourrait m'aider s'il vous plaît.

    Je vous remercie d'avance.

  2. #2
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    Bonjour,

    Pour ecrire dans un fichier, tu as plusieurs facon de procéder. Voici quelques exemples : https://msdn.microsoft.com/fr-fr/library/8bh11f1k.aspx

    Pour récupérer la valeur d'une textbox, tu as la propriété Text, et pour la checkbox, la propriété Checked (ou les equivalents selon le type d'application).

    Pour lire un fichier, tu as aussi plusieurs facon de procéder. Voici quelques exemples : https://msdn.microsoft.com/fr-fr/library/ezwyzy7b.aspx
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  3. #3
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    quel est ton code actuel ? Le .NET offre des facilités déconcertantes pour toute sorte de manip'
    Utilises-tu les StreamWriter/StreamReader pour serialiser tes données dans des fichiers à plat ?
    Plus je connais de langages, plus j'aime le C.

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci Momoth pour tes réponses.

    Maintenant mon problème j'ai 20 textbox(nomprog1.text, nomprog2.text etc...nomprog20.text), 20 textbox(url1.text, url2.text etc...url20.text) et c'est pareil pour bit32cb1(jen ai 20 checkbox) pour bit64cb1(j'en ai 20 checkbox) et system1(j'en ai 20 textbox). Je n'arrive pas à trouver une solution compacte(pour éviter par exemple d'écrire 20 string uniquement pour nomprog1.text a nomprog20.text). voici mon code :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(saveFileDialog1.ShowDialog() ==System.Windows.Forms.DialogResult.OK)
    			{
    				string nomproglgne1=nomprog1.Text;
    				string urllgne1=url1.Text ;
    				string bit32lgne1=bit32cb1.Checked.ToString();
    				string bit64lgne1=bit64cb1.Checked.ToString();
    				string systemlgne1=system1.Text;
    				string[] lines= {nomproglgne1,urllgne1,bit32lgne1,bit64lgne1,systemlgne1};
    				File.WriteAllLines(saveFileDialog1 .FileName,lines);
     
    			}

    Si vous avez une solution je suis preneur, Merci d'avance.

  5. #5
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    J'ai pas de code sous la main, mais grosso modo, l'idée est de boucler sur les éléments graphiques de ta fenêtre. Dans le cas des objets de type Form, il me semble qu'ils ont une propriété Controls qui retourne la liste des contrôles graphique (donc entre autre tes checkbox et tes textbox).

    Je pense qu'il faudrait boucler sur la liste Controls et tester le début du nom de chaque contrôle pour faire le traitement qui correspond. Donc un Foreach sur tes controls puis a l'intérieur un switch case sur le début du nom, et dans chaque case, tu cast ton control dans son type correspondant (textbox, checkbox, ...) et tu récupère la propriété qui correspond (Text, Checked, ...).

    A mon avis, c'est loin d’être la solution la plus propre et la plus optimisée, mais ça peut être un début de piste pour t'en sortir.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci Momoth, mais je suis débutant je pensais qu'une personne pourrait m'aider de faire un début de code parce que je ne sais pas faire boucler les éléments ou faire un foreach sur les contrôles. Merci quand même. Je vais essayer de rechercher encore sur le net mais c'est peine perdu.

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    Apparemment ton souci n'est pas sur la sérialisation vers un fichier. Pour tes CB, pourquoi ne pas opter pour une CheckedListBox, qui te permettrait facilement de récupérer les options cochées (via l'attribut SelectedItems) ? Pour ce qui est des exemples il suffit de demander à la MSDN, elle est super bien gaulée
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Voilà j'ai trouvé un exemple de code que je l'ai adapté et qui fonctionne. Le problème je n'arrive pas à faire l'opération inverse du code ci-dessous en faisant une lecture du fichier texte vers les textbox. Est ce que vous avez une proposition de code svp ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(saveFileDialog1.ShowDialog() ==System.Windows.Forms.DialogResult.OK)
    			{
    				TextBox[] nomprog = {nomprog1, nomprog2, nomprog3, nomprog4, nomprog5};
    				TextBox[] url={url1, url2 ,url3 ,url4 , url5};
    				StringBuilder sb=new StringBuilder();
    				foreach ( TextBox tbx in nomprog)
    					sb.AppendLine(tbx.Text);
    				foreach (TextBox tbx2 in url)
    					sb.AppendLine(tbx2.Text);
    				File .WriteAllText(saveFileDialog1.FileName,sb.ToString());
     
    			}

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Enregistrer les valeurs brutes dans le fichier n'est pas une bonne idée.
    Comment tu fait pour savoir à quoi rattacher la valeur que tu lis sinon ?

    Il faudrait au moins associer le nom du control à la valeur.

    Code non testé.
    C'est une idée parmi d'autres, dans cet exemple j'ai choisi d'avoir le caractère ":' pour séparer le nom du control de sa valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                /* Enregistrement */
                StringBuilder save = new StringBuilder();
                foreach (Control control in Controls)
                {
                    if (control is TextBox)
                        save.AppendLine(String.Format("{0}:{1}", (control as TextBox).Name, (control as TextBox).Text));
                    else if (control is CheckBox)
                        save.AppendLine(String.Format("{0}:{1}", (control as CheckBox).Name, (control as CheckBox).Checked.ToString()));
     
                }
     
                File.WriteAllText(@"C:\Test\Test.txt", save.ToString());

    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
     
                /* Lecture */
                StringBuilder loaded = new StringBuilder();
                using (StreamReader reader = new StreamReader(@"C:\Test\Test.txt"))
                {
                    String line;
                    // Read and display lines from the file until the end of
                    // the file is reached.
                    while ((line = reader.ReadLine()) != null)
                    {
                        String[] content = line.Split(':');
                        String name = content[0];
                        String value = content[1];
     
                        Control control = Controls[name];
                        if (control is TextBox)
                            (control as TextBox).Text = value;
                        else if (control is CheckBox)
                            (control as CheckBox).Checked = (value.Equals("true", StringComparison.OrdinalIgnoreCase));
                    }
                }

  10. #10
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup Popo. C'est exactement ce que je cherchais de plus le code est très intéressant et qui fonctionne, juste que l'apostrophe avant String line; est inutile. Et j'ai juste modifié les ":" parce que j'en ai besoin par "#" . Merci beaucoup de m'avoir répondu.

  11. #11
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par speed95 Voir le message
    Merci beaucoup Popo. C'est exactement ce que je cherchais de plus le code est très intéressant et qui fonctionne, juste que l'apostrophe avant String line; est inutile. Et j'ai juste modifié les ":" parce que j'en ai besoin par "#" . Merci beaucoup de m'avoir répondu.
    Il n'y a rien devant "String line;" à part le using sur le reader !!
    Après réflexion, il faudrait trouver un séparateur qui ne risque pas de se retrouver dans le texte des différents composants. Donc # n'ira pas non plus si jamais tu entre le texte "C#" par exemple.
    Le split fonctionne également avec une chaine de caractères donc rien ne t'empêche de choisir quelque chose comme "###" ou "@@@" ou n'importe quoi d'autres.

    Autre chose.
    Si on a répondu à ta question, utilise le bouton pour signifier que la solution proposée répond à ton besoin que le sujet est clos.

  12. #12
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Message lu et merci encore Popo. +1

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

Discussions similaires

  1. [XL-2003] Enregistrer les données des textbox dans une feuille excel
    Par monichou86 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/01/2010, 15h24
  2. [XL-2007] Rendre invisible des textbox si la checkbox n'est pas cochée dans l'userform
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 13/08/2009, 20h08
  3. recuperer les enregistrements d'un detailsviews dans des textbox
    Par mead_Developper dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/05/2009, 20h48
  4. Réponses: 12
    Dernier message: 06/08/2007, 07h46
  5. Ouvrir, Enregistrer des textbox dans une base de donnee ( DEBUTANT!)
    Par macfly77 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 01/12/2006, 13h21

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