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 :

[File] enregistrer des données dans un fichier


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 24
    Points
    24
    Par défaut [File] enregistrer des données dans un fichier
    Bonjour à tous,

    Je voudrais enregistrer plusieurs données dans un fichier (existant ou non).
    Pour l'enregistrement, l'idéal serait de cliquer sur un bouton, pouvoir entrer un nom de fichier puis valider.
    Pour le rappel, l'idéal serait d'avoir une listbox avec le nom des fichiers déjà enregistrés et de selectionner celui voulu.

    Les données:

    - le texte de 40 textbox (4 séries de 10 textbox)
    name1_01_tb, name1_02_tb, ..., name1_10_tb
    name2_01_tb, name2_02_tb, ..., name2_10_tb
    num1_01_tb, num1_02_tb, ..., num1_10_tb
    num2_01_tb, num2_02_tb, ..., num2_10_tb

    - 40 variables (4 séries de 10 variables)
    X_1_01, X_1_02, ..., X_1_10
    Y_1_01, Y_1_02, ..., Y_1_10
    X_2_01, X_2_02, ..., X_2_10
    Y_2_01, Y_2_02, ..., Y_2_10

    - 8 couleurs
    name1.backcolor, name2.backcolor, ...

    D'après mes recherches, il y a plusieurs façons mais je ne sais pas laquelle est la plus simple et la mieux adaptée à mon cas.

    Faut-il utiliser un fichier texte avec IO.StreamWriter et IO.StreamReader?
    Faut-il utiliser un fichier Excel?
    Faut-il utiliser des RichTextBox?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Pour l'enregistrement du fichier regarde du côté de la FAQ :
    http://faqcsharp.developpez.com/?pag...savefiledialog

    Pour le format de fichier, le plus simple et le plus performant de tes propositions est le StreamWriter. Cela est valable si tu veux enregistrer tes données "à plat", c'est-à-dire sans mise en forme (txt, csv, xml, ...).
    Regarde du côté de la FAQ :
    http://faqcsharp.developpez.com/?pag...adwritetxtfile

    Si tu veux lister tes fichiers dans une listbox pour pouvoir y accéder de nouveau, oui, pourquoi pas, ça ferait comme dans l'explorateur windows !

    Pour tes prochaines questions, regarde la FAQ avant
    FAQ

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 24
    Points
    24
    Par défaut
    désolé!
    effectivement j'ai trouvé pas mal de choses qui m'ont aidées!

    Par contre j'ai 2 problèmes:
    - je dois sauvegarder des positions de controles. J'arrive à les ecrire sur le fichier, mais pas les lire. Comment faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim sw As New IO.StreamWriter(MonFichier)
            sw.WriteLine(label1.Location)
     
    'ça fonctionne bien, le fichier texte contient {X=373,Y=315}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim sr As New IO.StreamReader(OpenFileDialog1.FileName)
            label1.Location = sr.ReadLine
     
    'Visual Studio me crée une erreur:
    'Une valeur de type 'String' ne peut pas être convertie en 'System.Drawing.Point'.
    -je voudrais "formater" le nom des fichiers à enregistrer genre "NOM_PRENOM_DATE.txt". Est-ce que ça existe un genre de messagebox où l'utilisateur pourrait saisir ces 3 éléments puis en validant ça les met en forme et ça crée le fichier? Dois-je créer un nouvelle form? Il y a-t-il une autre solution pour "formater" le nom?

    Merci d'avance

    (A moins d'avoir mal cherché, j'ai pas trouvé de réponses dans la FAQ et FORUM...)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Problème 1
    La propriété Localissation demande un system.drawing.point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim Pt As System.Drawing.Point
        Pt = New System.Drawing.Point(x,y) 'x,y= valeurs lues dans fichier
        Button1.Location = Pt
    Problème 2
    Avec un messagebox tu peux demander les 3 noms séparés par des espaces
    Récupérer les 3 noms
    Les formatter avec string.format("{0}_{1}_{2}.txt",nom1,nom2,nom3)
    Regarde l'aide de format il y a plusieurs options.
    Bon boulot Jean

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 24
    Points
    24
    Par défaut
    probleme 1
    je comprends pas très bien comment je récupère X et Y du fichier, vue qu'il sont sous la forme {X=373,Y=315} !!
    et je dois obligatoirement créer un nouveau System.Drawing.Point ?
    comme j'ai une vingtaine de controle, ça va faire un peu lourd au niveau du code!!
    je comprends bien que la ligne {X=373,Y=315} qu'on récupère du fichier est de type string et peut donc pas être un point, mais n'y a-t-il pas possibilité de faire une conversion simple?

    probleme 2
    comment on fait une messagebox qui comporte des textbox qu'on peut remplir?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    pour extraire
    Tu peux extraire avec la méthode split qui va te retourner un tableau avec 2 éléments, elem(0) "{x=373" et elem(1) "y=315"
    dim PT as new system.drawing.point
    Extraire x : pt.x = cint(elem(0).substring(elem(0).lastindexof("=")+1)
    extraire y:pt.x = cint(elem(1).substring(elem(1).lastindexof("=")+1)
    Il y a peu être plus rapide et plus simple

    Il y a aussi une autre possibilité
    Utiliser les paramètres du fichier de ressource.
    Pour chaque contrôle à positionner crée une entrée dans les paramètres sous le format system.drawing.point.
    (En mode design)Pour chaque contrôle lie la propriété (ApplicationSettings) location à l'entrée correspondante des paramètres.
    L'avantage est que si tu coches l'option les paramètres sont sauvegardés automatiquement à la fermeture du programme.(option dans l'onglet Application)
    Tu peux lire, modifier, sauvegarder
    Lire : Controle.location = my.settings.NomParam
    Modifier : my.settings.nomParam = controle.location
    Sauvegarder : my.settings.save
    dans ton code la valeur des paramètres.
    Bon boulot Jean

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 24
    Points
    24
    Par défaut
    oulala, ça devient un peu trop compliqué pour moi!!
    j'ai essayé un truc qui me semble plus simple et qui marche en plus!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sw As New IO.StreamWriter(MonFichier)
            sw.WriteLine(label1.Left)
            sw.WriteLine(label1.Top)
     
    Dim sr As New IO.StreamReader(OpenFileDialog1.FileName)
            label1.Left = sr.ReadLine
            label1.Top = sr.ReadLine
    comme ça, plus de problème de System.Drawing.Point

    Maintenant je dois enregistrer une couleur, et là j'ai pas encore trouvé de solution aussi simple!!

    et tu ne m'as pas répondu pour le problème 2:
    comment on fait une messagebox qui comporte des textbox qu'on peut remplir?

    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Tu peux utiliser InputBox, mais comme ce contrôle accepte un seul string il faut spécifier un séparateur pour les 3 parties du nom de fichier.
    Bon boulot Jean

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 24
    Points
    24
    Par défaut
    Finalement j'ai créer une autre form avec 3 textbox, parce que input box est trop limité! Merci quand même pour l'info, qui pourra m'être utile dans d'autre cas.

    Si ça intéresse des gens, j'ai trouvé une solution simple pour enregistrer une couleur dans le fichier, en passant par Argb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sw As New StreamWriter(FileName, False) 'crée le fichier
    sw.WriteLine(label1.BackColor.ToArgb)'ecrit la couleur son forme d'un entier
     
    Dim sr As New StreamReader(FileName)'ouvre le fichier
    label2.BackColor = Color.FromArgb(sr.ReadLine)
    Je sais pas si c'est très "propre" comme méthode mais ça marche

    Bye

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

Discussions similaires

  1. [Plugin] Enregistrer des données dans un fichier XML
    Par bulldo dans le forum Eclipse Platform
    Réponses: 8
    Dernier message: 05/08/2010, 10h12
  2. Enregistrer des donnée dans un fichier de donnée
    Par developppez dans le forum WinDev
    Réponses: 2
    Dernier message: 29/07/2010, 18h33
  3. Réponses: 6
    Dernier message: 05/02/2008, 23h52
  4. Enregistrer des données dans un fichier externe
    Par TarZan78 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 19/11/2007, 10h52
  5. [VB6]enregistrer des données dans un fichier
    Par tchinette42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 19/04/2006, 19h55

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