Bonsoir à tous,
Depuis hier, je suis dessus...
Je réceptionne des données sur le port série et souhaite les enregistrer dans un fichier...
Pour mes essais , j'avais mis tous les boutons sur la form principale, tout fonctionnait correctement.
J'ai eu la mauvaise idée, pour l'instant, de placer un seul bouton qui appelle une form2 qui va permettre à l'utilisateur de choisir son fichier et l'intervalle de temps qu'il souhaite pour enregistrer les données....
déclaration de variables en public
Bouton qui ouvre la form2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class form1 Public sfd As New SaveFileDialog Public fichiersauvegarde As String Public SaveFichier As String = Path.GetFileName(sfd.FileName) Public ecriture As StreamWriter
Code, dans fom2, qui permet de saisir le nom du fichier de sauvegarde
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Bt_Start_Rec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Sart_Rec.Click form2.Show() End Sub
Une fois le fichier saisi, j'ai un bouton, toujours sur la form2, qui "lance" l'enregistrement et ferme la form2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Form1.sfd.Title = "Créer votre fichier de sauvegarde" Form1.sfd.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop Form1.sfd.DefaultExt = ".txt" Form1.sfd.Filter = "Fichier texte (.txt)|*.txt" If Form1.sfd.ShowDialog = 1 Then Dim SaveFichier As String = Path.GetFileName(Form1.sfd.FileName) TxtBox_Chemin.Text = Path.GetFullPath(SaveFichier) Form1.fichiersauvegarde = SaveFichier 'je passe par une variable pour mes tests' MsgBox(SaveFichier) End If
Code du timer d'enregistrement qui se trouve sur la form1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Sub Bt_Debut_Enregistrement_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Debut_Enregistrement.Click MsgBox("interval enregistrements Bt_EnregistrementClick : " & Form1.RecTimer.Interval) MsgBox(Form1.fichiersauvegarde) 'msgbox de test' Form1.RecTimer.Enabled = True Form1.RecTimer.Start() MsgBox(Form1.RecTimer.Enabled) Me.Close() End Sub
l'erreur est donnée sur la ligne "ecriture.WriteLine"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Public Sub RecTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RecTimer.Tick MsgBox("valeur de rec dans rectimer_tick : " & rec) 'test ok' RecTimer.Interval = EnregistrementDonnees.interv 'intervalle affiché est bien celui choisi dans la form2 MsgBox("tic") 'affichage OK' MsgBox("SaveFichier d'enregistrement : " & fichiersauvegarde) 'le nom du fichier saisi dans la form2 apparaît bien là' ecriture.WriteLine( "les données récupérées et à écrire dans le fichier txt) 'ICI ERREUR' End Sub
Il semblerait que la déclaration du streamwriter ne soit pas correcte. Pour rappel, je l'ai placé en Public dans la form1L'exception NUllReference Exception n'a pas été gérée . La référence d'objet n'est pas définie à une instance d'un objet.
J'ai bien essayé de la placer dans la form2 et la rappeler en form1... bref, là je suis vraiment dans une impasse....
Merci à vous
Lio
Partager