Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.NET]Enregistrer et Enregistrer sous

Enregistrer avec Ctrl+S

Sujet résolu
    12 novembre 2011 à 19:41:01

    Salut a tous !
    J'ai un petit soucis : le voici
    J'ai 2 manière d'enregistrer un ficher, l'enregistrer sous qui ouvre la boite de dialogue a chaque fois même si le fichier existe déjà
    et le enregistrer qui est censer ouvrir la boite de dialogue si le fichier n'existe pas et s'il existe, l'enregistrer directement sans passer par la boite de dialogue (d'où Ctrl+S)

    Pas de problème pour écrire le code de l'enregistrer sous qui est le suivant :
    Private Sub SaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAs.Click
        SFDF5.FileName = "*.html"
        SFDF5.Filter = "Fichier HTML (*.html)|*.html|Fichier HTM (*.htm)|*.htm"
        SFDF5.ShowDialog()
        End Sub
        Private Sub SFDF5_FileOK(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SFDF5.FileOk
            File.WriteAllText(SFDF5.FileName, Me.TextBox2.Text, System.Text.Encoding.Default)
        End Sub
    


    Par contre je ne sait pas comment faire celui du enregistrer, je sait que je doit réaliser un test qui recherche le fichier et s'il n'existe pas il ouvre la boite de dialogue.
    Je m'en remet à vous en éspérent que vous saurrez me conseillé du mieu que possible.

    En attente de réponses

    -Aire Ayquaza
    • Partager sur Facebook
    • Partager sur Twitter
      12 novembre 2011 à 22:22:58

      Lors de ton premier Enregistrer/Enregistrer sous, tu récupère le chemin d'enregistrement du fichier dans un String, puis tu appelle la classe File pour vérifier l'existence d'un fichier, et si celui-ci existe déjà, pas la peine d'ouvrir la boite de dialogue :

      Private chemin_fichier As String = ""
      
      Private Sub SaveText()
          SFDF5.FileName = "*.html"
          SFDF5.Filter = "Fichier HTML (*.html)|*.html|Fichier HTM (*.htm)|*.htm"
          If SFDF5.ShowDialog() Then ' Pas besoin de générer un événement pour la boite de dialogue, une condition suffit
              File.WriteAllText(SFDF5.FileName, Me.TextBox2.Text, System.Text.Encoding.Default)
              chemin_fichier = SFDF5.FileName
          End If
      End Sub
      
      Private Sub SaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAs.Click
          SaveText()
      End Sub
      
      Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
          If File.Exist(chemin_fichier) Then ' Si le fichier existe
              File.WriteAllText(SFDF5.FileName, Me.TextBox2.Text, System.Text.Encoding.Default) ' On réécrit dans le fichier
          Else
              SaveText() ' On fait comme pour Enregistrer sous
          End If
      End Sub
      


      J'ai rajouté un fonction pour éviter de répéter deux fois la même chose, et j'ai imaginé que l'événement Save_Click est associé à ton bouton Enregistrer (et SaveAs_Click à ton bouton Enregistrer sous).
      • Partager sur Facebook
      • Partager sur Twitter
      La réponse à tout (sauf pour les aigles)
        13 novembre 2011 à 10:11:31

        Merci cela fonctionne mais il y a une faute, que moi même je ne peut résoudre : quand la boite de dialogue s'ouvre et que je clique annulé le logiciel plante
        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2011 à 10:34:06

          Try
              If SFDF5.ShowDialog() Then ' Pas besoin de générer un événement pour la boite de dialogue, une condition suffit
                  File.WriteAllText(SFDF5.FileName, Me.TextBox2.Text, System.Text.Encoding.Default)
                  chemin_fichier = SFDF5.FileName
              Else
                  SFDF5.Close()
              End If
          Catch ex As Exception
              MsgBox("Une erreur est survenue : " & ex.message.ToString(), MsgBoxStyle.critical, ProductName)
          End Try
          

          Voir cours sur gestion des exceptions.
          • Partager sur Facebook
          • Partager sur Twitter
          La réponse à tout (sauf pour les aigles)
            13 novembre 2011 à 10:45:32

            Close() n'est pas un membre de SaveFileDialog
            • Partager sur Facebook
            • Partager sur Twitter
              13 novembre 2011 à 10:49:21

              Tu as un cerveau, peut-être que tu peux au moins regarder les fonctions associés au composant SaveFileDialog(). Ais un minimum de logique pour rechercher une fonction semblable.
              • Partager sur Facebook
              • Partager sur Twitter
              La réponse à tout (sauf pour les aigles)
                13 novembre 2011 à 13:25:23

                Toujours rien trouver
                Pourquoi tu utilise pas l'event FileOK car avec cette event, si je clik annulé il ferme le dialog sans encombre
                • Partager sur Facebook
                • Partager sur Twitter
                  13 novembre 2011 à 13:39:15

                  Avec la fonction que je t'ai donné, la boite de dialogue se ferme sans encombre non plus. Avec l'événement FileOK, ça fait du code en plus, et ça ne gère pas si l'utilisateur clique sur Annuler.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  La réponse à tout (sauf pour les aigles)
                    13 novembre 2011 à 14:47:02

                    c'est bon j'ai réussi voici le code
                    Private chemin_fichier As String = ""
                        Private Sub SaveText()
                            Dim reponse As DialogResult
                            SFD1.FileName = "*.*"
                            SFD1.Filter = "Fichiers Text (*.txt)|*.txt|Fichier HTML (*.html)|*.html|Fichier HTM (*.htm)|*.htm"
                            reponse = SFD1.ShowDialog()
                            Try
                                If reponse = DialogResult.Cancel Then
                                Else : File.WriteAllText(SFD1.FileName, Me.TextBox1.Text, System.Text.Encoding.Default)
                                    chemin_fichier = SFD1.FileName
                                End If
                            Catch ex As Exception
                                MsgBox("Une erreur est survenue : " & ex.Message.ToString(), MsgBoxStyle.Critical, ProductName)
                            End Try
                        End Sub
                        Private Sub EnregistrersousToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerSousToolStripMenuItem.Click
                            SaveText()
                        End Sub
                        Private Sub EnregistrerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerToolStripMenuItem.Click
                            If File.Exists(chemin_fichier) Then ' Si le fichier existe
                                File.WriteAllText(SFD1.FileName, Me.TextBox1.Text, System.Text.Encoding.Default) ' On réécrit dans le fichier
                            Else
                                SaveText() ' On fait comme pour Enregistrer sous
                            End If
                        End Sub
                    
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [VB.NET]Enregistrer et Enregistrer sous

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown