[VB.net] Erreur NullreferenceException

Signaler
Messages postés
7
Date d'inscription
samedi 13 novembre 2010
Statut
Membre
Dernière intervention
25 juin 2011
-
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
-
Bonjour
JE tente de terminer une application qui me permettra de valider chez mes élèves des competences.
Dans mon application, j'ai modifié entièrement ma façon de sauvegarder: je suis passé de fichier txt à des fichiers xml.
Hélas maintenant ca ne fonctionne plus :(
En lançant j'ai une erreur NullReferenceException: cela se passe quand j'essaye de définir le contenu d'une variable.

Pour être plus précis voici les bouts de code:
Les classes utilisées:
Classe EleveBis:
<Serializable()>
Public Class EleveBis
    Property NomEleve As String = ""
    Property Prenom As String = ""
    Property Classe As String = ""
    Property Parties As List(Of SousPartie)

    Sub New()
    End Sub
End Class

Classe SousPartie:
<Serializable()>
Public Class SousPartie
    Property NomSousPartie As String = ""
    Property Themes As List(Of Theme)

    Sub New()
    End Sub
End Class

Classe Theme:
Serializable()>
Public Class Theme
    Property Nom As String = ""
    Property ListeDesCompetences As List(Of CompetenceBis)

    Sub New()
    End Sub
End Class

Classe CompetenceBis:
<Serializable()>
Public Class CompetenceBis
    Property Nom As String = ""
    Property Succes As Byte = 0
    Property Total As Byte = 0

    Sub New()
    End Sub
End Class

Je souhaite lorsque j'entre le nom d'un nouvel élève, enregistrer dans sa fiche les SousParties/themes/Competences.
Pour cela j'ai codé ceci:
Dim j As Integer
        Dim k As Integer
        Dim l As Integer

        With NouvelEleve
            .NomEleve = TXT_AjoutEleveNom.Text.ToUpper
            .Prenom = TXT_AjoutElevePrenom.Text
            .Classe = TXT_AjoutEleveClasse.Text
        End With

        For j = 0 To SousPartiesTampon.Count - 1
            Dim SouspartieEleve As New SousPartie
            Dim ThemeEleve As New Theme
            Dim CompetenceBisEleve As New CompetenceBis

            SouspartieEleve.NomSousPartie = SousPartiesTampon(j).NomSousPartie
            For k = 0 To SousPartiesTampon(j).Themes.Count - 1

                ThemeEleve.Nom = SousPartiesTampon(j).Themes(k).Nom
                For l = 0 To SousPartiesTampon(j).Themes(k).ListeDesCompetences.Count - 1
                    With CompetenceBisEleve
                        .Nom = SousPartiesTampon(j).Themes(k).ListeDesCompetences(l).Nom
                        .Succes = 0
                        .Total = 0
                    End With
                   ThemeEleve.ListeDesCompetences.Add(CompetenceBisEleve)
                Next l
                SouspartieEleve.Themes.Add(ThemeEleve)
            Next k
            NouvelEleve.Parties.Add(SouspartieEleve)
        Next j

        CreationListeClasse(TXT_AjoutEleveClasse.Text)

Cela bloque à la ligne:
ThemeEleve.ListeDesCompetences.Add(CompetenceBisEleve)
J'ai essayé un truc plus simple pour voir:
With NouvelEleve
            .NomEleve = TXT_AjoutEleveNom.Text.ToUpper
            .Prenom = TXT_AjoutElevePrenom.Text
            .Classe = TXT_AjoutEleveClasse.Text
        End With


            Dim SouspartieEleve As New SousPartie
            Dim ThemeEleve As New Theme
            Dim CompetenceBisEleve As New CompetenceBis

            With CompetenceBisEleve
                .Nom = "HELLO"
                .Succes = 0
                .Total = 0
            End With
            ThemeEleve.ListeDesCompetences.Add(CompetenceBisEleve)

Pareil, la ligne " ThemeEleve.ListeDesCompetences.Add(CompetenceBisEleve)" pose un problème. :(
Je pense avoir rempli la variable CompetencebisEleve: pourquoi ne puis_je pas l'ajouter à la variable Thème qui contient une liste de cete variable?
Si je me contente de rentrer le nom, prenom et classe cela fonctionne.
Dès que je passe aux listes,..... erreur.
Si quelqu'un peut m'expliquer mon erreur, je lui en serais reconnaissant car je ne vois pas l'origine de mon souci.
Merci :)

1 réponse

Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
5
    Public Class CompetenceBis
        Property Nom As String
        Property Succes As Byte
        Property Total As Byte
        Sub New()
            Me.Nom = ""
            Me.Succes = 0
            Me.Total = 0
        End Sub
    End Class

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim CompetenceBisEleve As New CompetenceBis With {.Nom "HELLO", .Succes 0, .Total = 0}
        Me.ListBox1.Items.Add(CompetenceBisEleve.Nom)
    End Sub