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 :

routine d'enregistrement savefiledialog vb express


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut routine d'enregistrement savefiledialog vb express
    Bonsoir à tous.

    Rectificatif de ma question

    Si je mets en clair MyImage.Save("c:\acd.bmp"), l'image s'enregistre dans le nom défini.

    Comment enregistrer l'image dans le fichier et le chemin obtenus par Savefiledialog. (ce fichier est bien créé, mais il est naturellement vide)




    routine d'enregistrement
    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
      Dim myStream As Stream
            Dim saveFileDialog1 As New SaveFileDialog()
            saveFileDialog1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"
            saveFileDialog1.FilterIndex = 2
            saveFileDialog1.RestoreDirectory = True
     
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
                myStream = saveFileDialog1.OpenFile()
            End If
     
            If (myStream IsNot Nothing) Then
                ' Code pour sauver suivant le nom de fichier
     
     MyImage.Save() 'COMMENT IDENTIFIER LE CHEMIN
            End If


    Merci.

  2. #2
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Si tu essaye avec cela, ca marche? (je n'ai pas testé donc il y a peut être des erreurs...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim saveFile As New SaveFileDialog
    If saveFile.ShowDialog = DialogResult.OK then
            Dim newPath As String = saveFile.FileName
            MyImage.Save(newPath)
    End if

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Merci Benito, j'étais arrivé à la même conclusion: le stream n'était pas nécessaire et j'en ai profité pour mettre un petit message de confirmation d'enregistrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         Dim saveFileDialog1 As New SaveFileDialog()
            saveFileDialog1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF"
            saveFileDialog1.FilterIndex = 2
            saveFileDialog1.RestoreDirectory = True
     
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
                Dim nomdefichier As String = saveFileDialog1.FileName
                'sauve l'image 
                MyImage.Save(nomdefichier)
                'message de fin d'enregistrement
                Dim mesagFin As String = "image enregistrée dans:  " & nomdefichier
                MsgBox(mesagFin)
            End If
    Ceci dit, à quoi sert exactement le "stream" la définition de msdn (Donne une vue générique d'une séquence d'octets.) ne me parle pas vraiment. la notion de flux non plus par ailleurs.

  4. #4
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    J'avoue que pour moi aussi la notion de flux ne me parle pas beaucoup. Ce qui est sur c'est que tu ne doit pas utiliser un stream pour indiquer le chemin d'un fichier.

    Enfin ce que j'ai cru comprendre après une petite visite sur msdn a propos des stream, c'est qu'il sont utilisé pour manipuler une suite d'octets...bref j'en sais pas plus qu'avant.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un stream est en effet un flux d'octets, donc des octets en mouvement
    il y a plusieurs classes qui héritent de stream et dont le fonctionnement de base est le meme (filestream, networkstream etc...)
    une fois un stream ouvert, on peut écrire ou lire des octets dedans, et selon le cas ca écrit ou lit des octets dans le fichier, sur le réseau, sur un port série etc...


    myimage.save sans que tu le saches utilises un filestream pour écrire le fichier image


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim mesagFin As String = "image enregistrée dans:  " & nomdefichier
    MsgBox(mesagFin)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox("image enregistrée dans:  " & nomdefichier)
    sont équivalent, et ca fait toujours une ligne de moins ...


    comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim nomdefichier As String = saveFileDialog1.FileName
    MyImage.Save(nomdefichier)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyImage.Save(saveFileDialog1.FileName)
    à ce rythme là ton appli va vite grossir et devenir moins lisible/maintenable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Merci pour la précision,
    Code :


    Dim mesagFin As String = "image enregistrée dans: " & nomdefichier
    MsgBox(mesagFin)

    et

    Code :

    MsgBox("image enregistrée dans: " & nomdefichier)

    sont équivalent, et ca fait toujours une ligne de moins ...


    comme
    Code :

    Dim nomdefichier As String = saveFileDialog1.FileName
    MyImage.Save(nomdefichier)

    et

    Code :

    MyImage.Save(saveFileDialog1.FileName)

    à ce rythme là ton appli va vite grossir et devenir moins lisible/maintenable
    Mais dans le cas si dessus, la variable "nomdefichier" est elle totalement inutile?
    Et dans ce cas si j'ai bien compris il vaudrait mieux écrire:

    MyImage.Save(saveFileDialog1.FileName)
    et
    MsgBox("image enregistrée dans: " & saveFileDialog1.FileName)

    La déclaration par la variable d'une chaine de caractère n'est elle plus nécessaire?

  7. #7
    Membre averti
    Avatar de Ogotcha
    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 398
    Points
    398
    Par défaut
    Non elle n'est plus tellement nécessaire mais je te conseil (avis personnel ) de stocker dans une variable ton saveFileDialog1.FileName
    Mon Blog
    FAQs DotNet
    Fonction utile : Recherche

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    saveFileDialog1.FileName est un string
    image.save() demande un string

    donc pourquoi créer une autre variable, utiliser plus de temps et de mémoire (certes c'est dérisoire dans ce cas) pour faire la même chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Cela peut avoir un intéret de stocker saveFileDialog1.FileName dans une variable si tu a l'intention de te servir du chemin plusieurs fois(ce serait ainsi plus explicite). Mais sinon autant se simplifier la vie (et le code)!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Donc si j'ai bien compris , dès qu'un élément est une chaine de caractère de manière implicite ou explicite, je n'ai pas besoin de l'utiliser sous forme de variable sauf si j'y trouve un intérêt de simplification ou de facilité de supervision de mon code.

    Par contre dès que je veux associer une autre forme de représentation à une expression "textuelle" il faut alors que je passe impérativement par la création d'une variable String (par exemple du type, si A a pour valeur numérique 2 et que la propriété est vrai, je veux voir s'afficher 2 soit forme de caractères, en chiffre ou en lettres.)

    ou alors dans ce cas également il est possible d'éviter la création de variable.

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ce n'est pas que pour les string

    savefiledialog.filename c'est une variable déjà en fait, c'est pas toi qui l'a déclaré mais c'en est une (enfin c'est une propriété qui pointe sur une variable)

    le but d'un programme c'est de manipuler des variables, pas forcément de les dupliquer !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Je ne pas bien comprit ce que tu voulais savoir mais par exemple, le passage d'une variable de type numérique à une chaine peut se faire de facon implicite.
    Dans d'autre cas tu peut utiliser MaVariable.ToString pour faire une conversion, ou encore CStr()...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    je cherche juste à comprendre quand définir une variable est une nécessité et quand elle ne l'est pas.

    si je reprend le morceau de code que j'ai récupéré sur msdn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Dim myStream As Stream
            Dim saveFileDialog1 As New SaveFileDialog()
            saveFileDialog1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"
            saveFileDialog1.FilterIndex = 2
            saveFileDialog1.RestoreDirectory = True
     
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
                myStream = saveFileDialog1.OpenFile()
            End If
     
            If (myStream IsNot Nothing) Then
    si je m'arrête à la première condition je pouvais éviter de définir mystream.
    et dans la deuxième condition il simplifie ma lecture, mais j'aurai pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (saveFileDialog1.OpenFile() IsNot Nothing) Then
    et si c'est le cas alors pourquoi dans cet exemple on defini mystream comme Stream

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    très bonne question, et dans ce cas il vaut mieux avoir une variable locale pour le stream

    car openfile créé un nouveau stream, d'ailleurs c'est une fonction, pas une propriété
    donc si tu l'appelles plusieurs fois tu vas créer un stream à chaque fois et jamais travailler avec le même !

    alors que savefiledialog.filename, ca ne créé rien à chaque, ca ne fait que renvoyer le string


    une fonction et une propriété permette d'obtenir une "variable"
    alors qu'une méthode (sub) ne fait qu'exécuter du code
    dans une fonction en général y a du code qui permet de créer ou trouver ce qu'il faut retourner
    une propriété bien souvent ne fait que retourner ou modifier une variable (par contre il peut y avoir du code dans le get et le set)

    je te conseille d'utiliser reflector, le framework étant codé avec le framework, on peut voir comment est écrite chaque chose qu'on appelle
    c'est comme ca que j'ai vu que openfile créé un nouveau stream
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Merci du conseil pour Reflector et pour cette réponse qui m'aide à mieux cerné le bien fondé de la déclaration d'une variable.

    Par contre pour le Stream, la notion de flux reste encore confuse pour moi.

    Est ce que ce pourrait être comparable à un état dynamique alors qu'un string par exemple serait lui considéré comme statique?

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai expliqué plus haut ce qu'étais un stream
    pour compléter je pourrais dire qu'un stream a une source ou une destination (fichier, réseau port série ou usb etc...)
    ce qu'on lit d'un stream et récupéré depuis la source
    ce qu'on écrit dans le stream est envoyé vers la destination
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Merci!

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

Discussions similaires

  1. Expression reguliere dans un enregistrement
    Par frizby dans le forum Requêtes
    Réponses: 0
    Dernier message: 16/06/2008, 12h34
  2. [SQL2005 Express] Enregistrement disparu
    Par abrial dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/03/2008, 16h49
  3. Réponses: 4
    Dernier message: 21/02/2008, 04h01
  4. Enregistrer une requête SQL SELECT sous VB Express
    Par Invité dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/01/2008, 09h04
  5. enregistrer avec savefiledialog du text
    Par TrollTop dans le forum VC++ .NET
    Réponses: 7
    Dernier message: 13/10/2007, 02h21

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