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 :

Sauvegarder le contenu des TextBox.


Sujet :

C#

  1. #1
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut Sauvegarder le contenu des TextBox.
    Bonjour,

    Je fais des tests afin d'appliquer le resultat à mes programmes.

    Le but est de sauvegarder les modifications des textbox lors de la fermeture de l'application.

    Le Form c'est 2 textbox.

    J'ai reférencé l'assembly avec System.Configuration comme indiqué par Dev01 dans un précédent POST

    Je voudrais savoir si mon code est convenable en m'y prenant de cette manière.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    namespace savTB
    {
        public partial class Form1 : Form
        {
            //Initialisation de config
            System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
     
            public Form1()
            {
                InitializeComponent();
     
            }
     
           //Lorsque le FORM est fermé les cellules sont enregistrées.
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                config.AppSettings.Settings["partage"].Value = textBox1.Text.Trim();
                config.AppSettings.Settings["user"].Value = textBox2.Text.Trim();
                config.Save(System.Configuration.ConfigurationSaveMode.Modified);
            }
     
            //Lorsque le FORM est chargé les cellule TEXTBOX sont remplies
            private void Form1_Load(object sender, EventArgs e)
            {
               textBox1.Text = config.AppSettings.Settings["partage"].Value;
               textBox2.Text = config.AppSettings.Settings["user"].Value;
            }
        }
    }
    Fichier config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    	<appSettings>
    		<add key="partage" value="c:\temp"/>
    		<add key="user" value="Administrateur"/>
    	</appSettings>
    </configuration>
    Edit : J'ai remarqué que si le fichier .config est absent l'applis génère une alerte. Comment y remedier ? (En cas d'utilisateur voulant economiser 1ko en supprimant ce fichier)

  2. #2
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    UP !

    surtout pour le fichier config

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    il est normal que l'application génère une alerte et meme une exception, si elle s'attend à trouver un fichier de config et qu'elle n'en trouve pas...

    je ne vois vraiment pas ce qui te choque la dedans. tu peux toutefois y remédier avec des blocs :
    try { ... } catch ( ... ) { ... } finally { ... }

    l'alerte c'est sa seule façon de te dire qu'elle cherche un truc et qu'il existe pas... je trouve cela non pas choquant mais plutot "prevenant"... imagine que ca arrive avec un fichier de données important, qu'elle ne te le dit pas et que tu te demande pk elle prend pas en compte le fichier (normal elle le trouve pas) et tu t'inkiete tu la debug pendant des heures des heures et des heures alors que l'erreur est toute con

    ca m'est déjà arrivé à l'aire du C avant les try catch

  4. #4
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Ok ! donc j'utilise :
    try { ... } catch ( ... ) { ... } finally { ... }

    Afin de vérifier sont existance et je le crée si il est inexistant ?

    Par contre un autre point que j'ai pas trouvé sur le fofo. Il n'existe pas de possibilité de codé le fichier app.config ?

    Car en clair il m'est très dérangeant pour certaine valeur.

    Quoi que j'ai peut être une idée, "crypter" la valeur avant de l'enregistrer.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Soit tu crypte la donnée, soit tu utilise autre chose que le system.configuration;

    Imagine que tu déporte ce traitement dans une assembly sous forme de librairie et là... a pu de System.Configuration, flute alors
    rien ne t'empeche de sauver les données en vrac tel quelles ou après traitement dans un fichier texte ou XML (le XML n'est pas compliqué ni long à traiter/gérer en C#)

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Pour verifier l'existance d'un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (File.Exists("Chemin complet du fichier"))
    {
         //Ce que tu souhaites faire.
    }
    Pour créer un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.CreateText("Chemin complet du fichier");
    Pour ouvrir un fichier et ecrit à la suite des données qu'il contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.AppendText("Chemin complet du fichier");
    En gros l'objet "File" contient des méthodes pour faire ce que tu souhaites.
    Pour les répertoires, voir l'objet "Directory".

  7. #7
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Bon pour Crypter j'ai utiliser une classe trouver sous MSDN

    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
    42
    43
     
    public void ProtectConfiguration()
            {
     
                // Get the application configuration file.
                System.Configuration.Configuration config =
                        ConfigurationManager.OpenExeConfiguration(
                        ConfigurationUserLevel.None);
     
                // Define the Dpapi provider name.
                string provider =
                    "DataProtectionConfigurationProvider";
     
     
                // Get the section to protect.
                ConfigurationSection connStrings =
                    config.AppSettings;
     
                if (connStrings != null)
                {
                    if (!connStrings.SectionInformation.IsProtected)
                    {
                        if (!connStrings.ElementInformation.IsLocked)
                        {
                            // Protect the section.
                            connStrings.SectionInformation.ProtectSection(provider);
     
                            connStrings.SectionInformation.ForceSave = true;
                            config.Save(ConfigurationSaveMode.Full);
     
                            System.Windows.Forms.MessageBox.Show("Section " + connStrings.SectionInformation.Name + " is now protected by " + connStrings.SectionInformation.ProtectionProvider.Name);
     
                        }
                        else
                            System.Windows.Forms.MessageBox.Show("Can't protect, section " + connStrings.SectionInformation.Name + " is locked");
                    }
                    else
                        System.Windows.Forms.MessageBox.Show("Section " + connStrings.SectionInformation.Name + "is already protected by" + connStrings.SectionInformation.ProtectionProvider.Name);
     
                }
                else
                    System.Windows.Forms.MessageBox.Show("Can't get the section " + connStrings.SectionInformation.Name);
            }
    Et son contraire :
    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
     
            // Unprotect the connectionStrings section.
            public void UnProtectConfiguration()
            {
     
                // Get the application configuration file.
                System.Configuration.Configuration config =
                        ConfigurationManager.OpenExeConfiguration(
                        ConfigurationUserLevel.None);
     
                // Get the section to unprotect.
                ConfigurationSection connStrings =
                    config.ConnectionStrings;
     
                if (connStrings != null)
                {
                    if (connStrings.SectionInformation.IsProtected)
                    {
                        if (!connStrings.ElementInformation.IsLocked)
                        {
                            // Unprotect the section.
                            connStrings.SectionInformation.UnprotectSection();
     
                            connStrings.SectionInformation.ForceSave = true;
                            config.Save(ConfigurationSaveMode.Full);
     
     
                            System.Windows.Forms.MessageBox.Show("Section " + connStrings.SectionInformation.Name + "is now unprotected.");
     
                        }
                        else
                            System.Windows.Forms.MessageBox.Show("Can't unprotect, section " + connStrings.SectionInformation.Name + "is locked");
                    }
                    else
                        System.Windows.Forms.MessageBox.Show("Section " + connStrings.SectionInformation.Name + " is already unprotected.");
     
                }
                else
                    System.Windows.Forms.MessageBox.Show("Can't get the section " + connStrings.SectionInformation.Name);
     
            }
    Par contre j'ai pas du tout comprie :

    Imagine que tu déporte ce traitement dans une assembly sous forme de librairie et là... a pu de System.Configuration, flute alors
    Mais c'est normal j'ai que 2 mois d'expérience dans le domaine.
    Je chercherais sur la toile.


    Merci ced600 pour le petit bout de code je comptais faire une chose dans le genre.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Ce n'était pas une critique juste une remarque.
    rassure toi

  9. #9
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Re !

    Bon je viens de finir mon prog faire une batterie de test. Et là ....
    Je me rends compte que les scripts au dessus ne fonctionne pas correctement.
    Le programme peux se lancer 3 fois sans aucun soucis. lors de la troisieme fermeture.
    Le Message d'erreur suivant fais son appartion.

    Le fichier de configuration a été modifié par un autre programme.
    Donc je me resigne à stopper ce systeme là.

    Donc je vous demande comment faite-vous pour sauvegarder vos champs textbox sur lesquels vous voulez garder votre derniere saisie ?

    Merci de votre aide.

  10. #10
    Membre éprouvé Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    Il serais plus simple d'ecrire un fichier texte avec le contenu de ta textbox
    Quelquechose du genre de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    using System.IO;
    ...
    FileStream stream = new FileStream("fichier.txt", FileMode.Create);
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(textbox1.Text);
    writer.Close();
    stream.Close();
    Pour recupérer ton texte, utilise StreamReader

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    J'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using System.IO;
    ...
    StreamWriter writer = File.CreateText("Fichier.txt");
    writer.Write(textbox1.Text);
    writer.Close();
    plutot que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using System.IO;
    ...
    FileStream stream = new FileStream("fichier.txt", FileMode.Create);
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(textbox1.Text);
    writer.Close();
    stream.Close();
    Est ce que quelqu'un aurait un avis sur ces deux codes, lequel est le meilleur ? A moins qu'il soit identique au final après compilation ?


    Je me demande si le config.Save() ferme le fichier de configuration après sa sauvegarde. N'aurait tu pas une méthode pour le fermer explicitement, parce que vu ton erreur, j'ai l'impression que tu ouvre le fichier mais qu'il ne se trouve pas fermer (pour une raison x ou y) et comme tu ne le libère pas lorsque tu le réouvres tu as cette erreur.

    Je ne sais pas si j'ai été assez clair ?

  12. #12
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Ced je pense avoir compris je regarderais ça.

    Onlava j'avais pensé utiliser un fichier texte pour garder mes champs. Mon soucis est que certain de mes textBox sont des mots de passe et je me voie mal les mettre en clair dans un fichier texte.

  13. #13
    Membre éprouvé Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    llaffont, effectivement ça pose problème. Tu pourrais crypter mais ça reviendrai
    au meme à cause de la clé..

    ced600, Ca m'intéresse aussi de connaitre les différence au niveau de la compilation.
    J'utilise cette syntaxe par habitude, c'est vrai que le coup du File.Create() a l'air plus confortable.

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bon j'ai créé deux méthodes l'une avec ton code, et l'autre avec le mien, et j'ai regardé le code IL généré. Bah je n'y comprends pas grand chose. J'ai l'impression que ma méthode ouvre un flux stream en moins.
    Je te laisse juger toi même.

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Disons que les deux méthodes reviennent au meme, maintenant meme en regardant le code IL généré, il te sera difficile de savoir si c'est strictement identique, dans la mesure ou tu utilise une méthode "automatique".

    Dans tous les cas le principe reste le même, même au niveau du framework, mais il n'est pas évident d'avoir le meme code, et je suis pas sure non plus que l'usage de l'une ou l'autre soit trascendant en terme de performance. Par défaut j'aurait plutot tendance à dire que la mthode la plus confortable est préférable... après tout le CLR génere le code natif à la volée... il lui sera plus facile de générer un code natif pour lequel il a probablement des blocs deja tout prévus...

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Merci pour les précisions.

  17. #17
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Je viens de faire deux trois test et je me suis rendu compte qu'il n'y avait pas besoin de décrypter le .config.

    Le programme prends en compte les changements et les sauvegarde dans le .config même si celui-ci est crypter.

    Donc je ne vois pas trop l'utilité de UnProtectConfiguration()

    En tout cas merci de votre aide ce problème là est Réglé.

  18. #18
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    N'oublie pas alors de mettre le tag resolu

  19. #19
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Desole j'avais pas vu.

  20. #20
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Gniark ! Gniark ! Gniark !

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

Discussions similaires

  1. Comment remplir les cellules excel par le contenu des textbox
    Par USER_QUOT dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/05/2015, 16h10
  2. [Débutant] Séparer le contenu des textboxs dans le fichier
    Par laiiha dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/06/2014, 11h27
  3. [Débutant] Ouvrir un fichier word et remplacer des mots pas le contenu des textbox
    Par nabileon dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/03/2013, 15h52
  4. Vérifier le contenu des TextBox
    Par Raadgever596 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/12/2008, 14h21
  5. Contenu des textbox
    Par amwus dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 28/10/2007, 22h32

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