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 :

[C#] Sauvegarder Options


Sujet :

Windows Forms

  1. #1
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut [C#] Sauvegarder Options
    Bonjour,

    Toujours à la suite, je souhaiterai connaître les différentes façons dont
    l'etats de contrôles dans une Form peuvent être enregistré ?

    Par exemple une CheckBox avec des 1 ou des 0, selon si elle est cochée ou non ? Et donc effectuer la lecture des ces 1 ou 0 à l'ouverture de l'application pour retrouver la configuration...

    Est-ce possible d'effectuer ce genre de sauvegardes externes à l'applications, existe t'il un tutoriel ?

    Merci beaucoup.

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    oui, ca s'appele la sérialisation, c'est très simple à mettre en oeuvre, tout est là :

    http://plasserre.developpez.com/v5-8.htm
    j'suis vert !

  3. #3
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Merci bcp mais c'est du VB, je suis allérgique

    Puis surtout je n'arrive pas à traduire et les traducteurs de dvp.com

  4. #4
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    oui mais tu as la réponse à ta question, il faut que tu utilise la sérialisation, fait des recherches sur le net pour avoir des sources en c#, moi je fais que du vb alors ...
    j'suis vert !

  5. #5
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921

  6. #6
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    En fait je me suis penché sur ça (sérialisation binaire) :

    http://odelmotte.developpez.com/tuto...n/csharp/#L5.1

    mais où on défini l'objet... à sérialiser là ?!

    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
    public static bool Serialize(object objet, string fichier)
     
    {
     
    	if (objet == null)
     
        	return false;
     
     
     
    	FileStream stream = new FileStream(fichier, FileMode.Create);
     
     
     
    	System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = 
     
    		new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
     
    	serializer.Serialize(stream, objet);
     
    	stream.Close();
     
     
     
    	return true;
     
    }
    Je ne comprend pas très bien le fonctionnement quand même,
    cela va créer un fichier

    Merci.

  7. #7
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    tu va souvegarder des propriétés d'objet dans un fichier qui va s'enregistrer sur le disque et que tu va allez lire quand il existe lors de l'ouverture de la fenetre de ton appli.

    par exemple pour ton checbox, tu peux créer une variable etat dans lequel tu va sauvegarder le fait que ta checkbox soit à 1 ou à 0, au load de ton formulaire tu vas récupérer cette info et l'appliquer à ton checkbox.

    Dans le lien que je t'ai donné, c'est bien expliqué malgré le fait que ce soit en vb. Sert toi de ce line pour la compréhension, apres tu ira cherche du code en c#
    j'suis vert !

  8. #8
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Dsl mais je n'arrive vraiment pas à executer un petit quelquechose,
    genre sauvegarder un petit texte...
    Il faut d'abord importer un namespace, donc déjà je bloque

    Puis je n'arrive vraiment pas à utiliser ces bouts de codes (voir plus haut)

    Merci

  9. #9
    Membre régulier Avatar de Davide
    Profil pro
    Inscrit en
    Août 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 80
    Points : 84
    Points
    84
    Par défaut
    Tu dois créer une classe (sérialisable) qui contiendra des variables qui te permettront de transposer (dans les deux sens..) les options à sauvegarder.

    Pour effectuer une sérialisation binaire tu as besoin de deux choses :
    -> 1 handle vers un fichier (un file stream)
    -> 1 BinaryFormatter

    En ce qui concerne les namespaces tout est détaillé dans la documentation de dotnet..
    ______________________

    DaViDe

  10. #10
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Bonjour,
    je viens de lire ce post et je me pose une question :
    pour une si petite info, pourquoi ne pas la stocker dans le registre windows ?
    C'est quelque chose que je fais couramment, est-ce risqué ?
    Merci d'avance.
    Pensez aux règles et au qui rime avec !

  11. #11
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    y'a un exemple là :

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconbasicserialization.asp

    tu crée ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Serializable]
    public class MyObject {
      public int n1 = 0;
      public int n2 = 0;
      public String str = null;
    }
    là y'a trois variables qui sont sauvegarder, n1,n2, str

    là on sérialise en enregsitrant dans un fichier binaire MyFile.bin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MyObject obj = new MyObject();
    obj.n1 = 1;
    obj.n2 = 24;
    obj.str = "Some String";
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, obj);
    stream.Close();
    et au load de ta fenetre tu récupere les donnés dans le fichier (si il existe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
    MyObject obj = (MyObject) formatter.Deserialize(stream);
    stream.Close();
     
    // Here's the proof.
    Console.WriteLine("n1: {0}", obj.n1);
    Console.WriteLine("n2: {0}", obj.n2);
    Console.WriteLine("str: {0}", obj.str);
    j'suis vert !

  12. #12
    Membre régulier Avatar de Davide
    Profil pro
    Inscrit en
    Août 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 80
    Points : 84
    Points
    84
    Par défaut
    Toniolol n'a pas tord..
    En plus je pense que tu risques d'y gagner en rapidité..
    ______________________

    DaViDe

  13. #13
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Merci bcp HULK je vais essayer ça

    Et pour l'info je ne cherche pas à sauvegarder dans la base de registre...

  14. #14
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Donc ça a l'air de marcher mais j'ai des erreurs du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The type or namespace name 'IFormatter' could not be found (are you missing a using directive or an assembly reference?)
    Comment inclure ces fonctions... ?

    C'est cette ligne qui génère l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IFormatter formatter = new BinaryFormatter();
    Merci

  15. #15
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters.Binary;
    pour une si petite info, pourquoi ne pas la stocker dans le registre windows ?
    C'est quelque chose que je fais couramment, est-ce risqué ?
    Perso, j'évite d'y toucher quand je peux m'en passer... De plus, il me semble qu'elle est amenée à disparaître, non ?

    Sinon, une autre solution pour stocker des paramètres utilisateurs, c'est le fichier de configuration, où des sections et les classes permettant de les gérer sont prévues pour dans le framework 2.0.

  16. #16
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Salut et Merci, j'avais déjà essayé et sans succès

    Mais j'ai trouvé :
    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
    public void sauver()
            {
                MyObject obj = new MyObject();
                obj.n1 = 1;
                obj.n2 = 24;
                obj.str = textBox1.Text.ToString();
                BinaryFormatter formatter = new BinaryFormatter();
                Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
                formatter.Serialize(stream, obj);
                stream.Close();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                sauver();
            }
     
            public void charger()
            {
                BinaryFormatter formatter = new BinaryFormatter();
                Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
                MyObject obj = (MyObject)formatter.Deserialize(stream);
                stream.Close();
     
                textBox1.Text = obj.str.ToString();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                charger();
            }
    J'ai remplacé les IFormatter par des BinaryFormatter (un peu au pif) et ça a marché !!!

    Encore Merci à Tous

  17. #17
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    j'avais déjà essayé et sans succès
    Tu en es sûr ?
    Comme l'interface IFormatter est dans le namespace System.Runtime.Serialization, c'est quand même bizarre que tu aies eu ce message si tu avais bien inclus cette clause...
    M'enfin, l'essentiel, c'est que maintenant ça marche !

  18. #18
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Je confirme, j'avais bien essayé

    Et c'est une erreur de namespace que j'avais avec IFormatter

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

Discussions similaires

  1. Option de sauvegarde par défaut : Remplacement
    Par IRAD dans le forum Administration
    Réponses: 1
    Dernier message: 14/01/2015, 09h14
  2. Sauvegarder les options de configuration à la sortie de Windows
    Par bourriquet_42 dans le forum Windows 7
    Réponses: 1
    Dernier message: 13/12/2011, 15h12
  3. [VBA-W]Options de sauvegarde
    Par ippo_master dans le forum VBA Word
    Réponses: 2
    Dernier message: 01/10/2007, 12h03
  4. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

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