[VB.Net] "La référence d'objet n'est pas définie à une instance d'un objet."
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à mon problème code ;):
La classe principale :
Code:
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 Film :
Code:
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 |
La classe où ça pose problème (création d'une nouvelle fiche)
Code:
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 |
L'erreur est la suivante :
"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)