Bonjour à tous et merci de vous intéresser à mon sujet !
Je programme en VB.net sous Visual Basic 2010 Express. J'apprend grâce à un tutoriel sur internet, et j'en suis à un T.P où on doit créer une bibliothèque.
Bon, voilà monproblèmecode :
La classe principale :
La classe Film :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 Imports System.IO Imports System.Xml.Serialization Public Class Main Const NomFichier As String = "Films.xml" Public ListeFilms As List(Of Film) Dim Fichier As FileStream Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.LBL_SYNOPSIS.ScrollBars = ScrollBars.Vertical Me.LBL_AVIS_PERSONNEL.ScrollBars = ScrollBars.Vertical DeserialiserEtAfficher() End Sub Private Sub Main_FormClosing(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing Serialiser() End Sub Sub DeserialiserEtAfficher() If File.Exists(NomFichier) Then 'si le fichier existe... Fichier = File.Open(NomFichier, FileMode.Open) ' on l'ouvre If Fichier.Length > 0 Then 'Si le fichier n'est pas vide... Dim Deserialiseur As New XmlSerializer(GetType(List(Of Film))) ListeFilms = Deserialiseur.Deserialize(Fichier) 'on désérialise ActualiserNomsFilms() 'et on actualise la ListBox Else 'Si le fichier est vide MsgBox("Le fichier '" & NomFichier & "' n'a pas été trouvé. Il va donc être créé.", 32, "Fichier introuvable") 'erreur fichier pas trouvé Fichier.Close() Fichier = File.Create(NomFichier) 'on crée le fichier End If ElseIf Not File.Exists(NomFichier) Then 'Si le fichier n'existe pas MsgBox("Le fichier '" & NomFichier & "' n'a pas été trouvé. Il va donc être créé.", 32, "Fichier introuvable") 'erreur fichier pas trouvé Fichier = File.Create(NomFichier) 'on crée le fichier End If End Sub Sub ActualiserNomsFilms() For i As Integer = 0 To ListeFilms.Count - 1 'i va êtreaugmenté de 1 à chaque tour Me.LB_LISTE_FILMS.Items.Add(ListeFilms.ElementAt(i).Titre) 'on ajoute à chaque tour l'élément qui a pour index i Next End Sub Sub Serialiser() If Not IsNothing(ListeFilms) Then 'Si il y a des films à enregistrer 'ListeFilms.Count <> 0 Then Fichier = File.Create(NomFichier) 'On remplace le fichier précedent par un nouveau, vide Dim Serialiseur As New XmlSerializer(GetType(List(Of Film))) Serialiseur.Serialize(Fichier, ListeFilms) 'On serialise Else 'Si il n'y a pas de films à enregistrer Fichier.Close() File.Delete(NomFichier) 'On supprime simplement le fichier End If End Sub Private Sub BT_RECHERCHE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_RECHERCHE.Click Dim Trouve As Boolean = False Me.LB_LISTE_FILMS.Items.Clear() If Not IsNothing(ListeFilms) Then For Each FilmActuel As Film In ListeFilms If Me.TXT_TITRE.Text <> "" Then If FilmActuel.Titre.Contains(Me.TXT_TITRE.Text) Then Me.LB_LISTE_FILMS.Items.Add(FilmActuel) Trouve = True End If End If If Me.TXT_ACTEURS.Text <> "" Then If FilmActuel.Acteurs.Contains(Me.TXT_TITRE.Text) Then Me.LB_LISTE_FILMS.Items.Add(FilmActuel) Trouve = True End If End If If Me.TXT_REALISATEUR.Text <> "" Then If FilmActuel.Realisateur.Contains(Me.TXT_TITRE.Text) Then Me.LB_LISTE_FILMS.Items.Add(FilmActuel) End If End If If Me.TXT_GENRE.Text <> "" Then If FilmActuel.Genre1.Contains(Me.TXT_TITRE.Text) Or FilmActuel.Genre2.Contains(Me.TXT_TITRE.Text) Then Me.LB_LISTE_FILMS.Items.Add(FilmActuel) End If End If If Me.TXT_ANNEE.Text <> "" Then If FilmActuel.Annee.Contains(Me.TXT_TITRE.Text) Then Me.LB_LISTE_FILMS.Items.Add(FilmActuel) End If End If Next End If If IsNothing(Me.LB_LISTE_FILMS.Items) Then MsgBox("Rien trouvé !", 32, "Rien trouvé !") End If End Sub Private Sub BT_EFFACER_RECHERCHE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_EFFACER_RECHERCHE.Click Me.TXT_TITRE.Text = "" Me.TXT_REALISATEUR.Text = "" Me.TXT_GENRE.Text = "" Me.TXT_ANNEE.Text = "" Me.TXT_ACTEURS.Text = "" End Sub Private Sub BT_NOUVELLE_FICHE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_NOUVELLE_FICHE.Click EditionFilms.Show() End Sub End Class
La classe où ça pose problème (création d'une nouvelle fiche)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 <Serializable()> Public Class Film Private _Titre As String Private _Annee As Date Private _Realisateur As String Private _Genre1 As String Private _Genre2 As String Private _Acteurs As String Private _Synopsis Private _RemarquePerso Private _NotePerso Public Sub New() End Sub Public Sub New(ByVal Titre As String, ByVal Annee As Date, ByVal Realisateur As String, ByVal Genre1 As String, ByVal Genre2 As String, ByVal Acteurs As String, ByVal Synopsis As String, ByVal RemarquePerso As String, ByVal NotePerso As Integer) _Titre = Titre _Annee = Annee _Realisateur = Realisateur _Genre1 = Genre1 _Genre2 = Genre2 _Acteurs = Acteurs _Synopsis = Synopsis _RemarquePerso = RemarquePerso _NotePerso = NotePerso End Sub Public Sub Update(ByVal Titre As String, ByVal Annee As Date, ByVal Realisateur As String, ByVal Genre1 As String, ByVal Genre2 As String, ByVal Acteurs As String, ByVal Synopsis As String, ByVal RemarquePerso As String, ByVal NotePerso As Integer) _Titre = Titre _Annee = Annee _Realisateur = Realisateur _Genre1 = Genre1 _Genre2 = Genre2 _Acteurs = Acteurs _Synopsis = Synopsis _RemarquePerso = RemarquePerso _NotePerso = NotePerso End Sub Public Property Titre Get Return _Titre End Get Set(ByVal value) _Titre = value End Set End Property Public Property Annee Get Return _Annee End Get Set(ByVal value) _Annee = value End Set End Property Public Property Realisateur Get Return _Realisateur End Get Set(ByVal value) _Realisateur = value End Set End Property Public Property Genre1 Get Return _Genre1 End Get Set(ByVal value) _Genre1 = value End Set End Property Public Property Genre2 Get Return _Genre2 End Get Set(ByVal value) _Genre2 = value End Set End Property Public Property Acteurs Get Return _Acteurs End Get Set(ByVal value) _Acteurs = value End Set End Property End Class
L'erreur est la suivante :
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 Public Class EditionFilms Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Me.TXT_SYNOPSIS.ScrollBars = True 'Me.TXT_AVIS_PERSONNEL.ScrollBars = True Me.TXT_TITRE.Text = "[Titre]" End Sub Private Sub BT_SAVE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_SAVE.Click If Me.TXT_TITRE.Text = "" Then MsgBox("Le champ 'Titre' est incorrect.", 32, "Champ incorrect") Else Dim MonFilm As New Film(Me.TXT_TITRE.Text, Me.DT_DATE_SORTIE.Value, Me.TXT_REALISATEUR.Text, Me.TXT_GENRE1.Text, Me.TXT_GENRE2.Text, Me.TXT_ACTEURS.Text, Me.TXT_SYNOPSIS.Text, Me.TXT_AVIS_PERSONNEL.Text, Me.NUM_NOTE.Value) Main.ListeFilms.Add(MonFilm) Me.Close() End If End Sub End Class
"La référence d'objet n'est pas définie à une instance d'un objet."
Elle survient à la ligne 14 de la dernière classe, la classe EditionFilms
Oui, je sais tout plein de sujets, forums, etc... ont étés créés à ce sujet-là, mais je n'ai jamais rien trouvé qui ressemble à mon erreur
Par la même occasion, c'est la première fois que je publie du code VB.net sur les forums, donc si vous avez quoi que ce soit à me dire à propos dudit code, n'hésitez pas !
Merci bien !
Syrl
EDIT : j'en profite pour demander ce que signifie un terme que je n'ai pas bien compris : instancier, et une instance (c'est aussi pour ça que je n'ai pas compris l'erreur)
Partager