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

VB.NET Discussion :

[VB.Net] "La référence d'objet n'est pas définie à une instance d'un objet."


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 17
    Points
    17
    Par défaut [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 : 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 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
    <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 : 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
    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)

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Main.ListeFilms n'a jamais été instancié...
    C'est une erreur très courrante si tu avais cherché un peu dans le forum mais bref il faut que tu créé une nouvelle instance de ta liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    'Soit directement dans ta classe
    Public ListeFilms As New List(Of Film)
     
    'Soit dans le Load de ta classe main vu que tu n'as pas de constructeur
    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
     
        me.ListeFilms= New List(Of Film)
     
        DeserialiserEtAfficher()
    End Sub
    Edit pour ta seconde question va voir le cours de Mr Lasserre ici qui est une vrai mine d'informations pour les débutants et confirmés
    (Pour toi c'est plus précisément ici avec un petit ctrl F dans le pdf
    XII-F-1 - Instance d'objet

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    D'accord !
    Merci bien !
    Syrl

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/08/2013, 15h40
  2. Réponses: 21
    Dernier message: 30/12/2010, 13h33
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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