[VB.net] Probléme sur les list de class

Résolu/Fermé
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 - 10 nov. 2015 à 17:41
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 10 nov. 2015 à 19:22
Bonjour,
Je travaille sur un projet en VB.net et j'ai un petit soucis sur une liste de class. (Et que je dois avouer, commence à me prendre la tête).

Dans mon projet, je crée une nouvelle class de la forme:
class commande ( integer, Dictionary(Of String, Integer), single)

Public Class Commande

    Private _numtable As Integer

    Public Property NumTable() As Integer

        Get
            Return _numtable
        End Get
        Set(ByVal value As Integer)
            _numtable = value
        End Set
    End Property


    Private _element As New Dictionary(Of String, Integer)
    Public Property Elements() As Dictionary(Of String, Integer)
        Get
            Return _element
        End Get
        Set(ByVal value As Dictionary(Of String, Integer))
            _element = value
        End Set
    End Property

    Private _total As Single = 0
    Public Property Total() As Single
        Get
            Return _total
        End Get
        Set(ByVal value As Single)
            _total = value
        End Set
    End Property

End Class


Pour l'instant rien de bien compliquer.

Ensuite je crée une list de commande et je l'initialise lors de l'ouverture du formulaire.

Public Class serveur

    Private dic_plats As New Dictionary(Of String, Single)
    Private dic_boissons As New Dictionary(Of String, Single)
    Private dic_dessert As New Dictionary(Of String, Single)
    Private commandes As New List(Of Commande)


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        dic_plats.Add("salade de fugass", 15.5)
        dic_boissons.Add("melasse", 9)
        dic_dessert.Add("gateau de boue", 5)
        Dim i As Integer

        Dim commande_interne As New Commande

        For i = 0 To 4
        '' Dans cette boucle j'ajoute 5 élément dans ma liste afin qu'elle ne soit pas vide''

            commande_interne.NumTable = i + 1
            commande_interne.Total = 0
            commandes.Add(commande_interne)
            ''[/contents/1176-vbscript-les-boites-de-dialogue MsgBox]("numero de table " & Me.commandes.Item(i).NumTable) 
            '' le Msgbox ci dessus est pour vérifier si j'y ajoute les bonnes valeurs ce qui est le cas.
        Next


        For i = 0 To 4
            MsgBox("table " & commandes.Item(i).NumTable & Chr(13) & "i =" & i)
        Next
        '' Mon probléme est juste ici, mon Msgbox afin pour les 5 itérations table = 5, alors que précédemment j'avais bien 1, 2, 3, 4 puis 5. Pourquoi??????

        BT_table1.Checked = True

    End Sub



Voilà, tous ce compile sans problème, mais pas comme je le voudrais.
Mon problème vient de commandes.item(i).NumTable car dans la premier boucle for, j'ai bien les 5 tables ( 1 jusqu'à 5), alors que dans la deuxième je n'ai que la 5, et je ne sais pas pourquoi, si quelqu'un pouvais m'expliquer pourquoi je l'en remercie.

Cordialement.
Evilfalcon




1 réponse

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
Modifié par Whismeril le 10/11/2015 à 19:21
Bonsoir, c'est normal,

dans ta liste tu ajoutes toujours la même instance de Commande.

Il faut en créer une nouvelle à chaque itération

        For i = 0 To 4
        '' Dans cette boucle j'ajoute 5 élément dans ma liste afin qu'elle ne soit pas vide''
            Dim lacomande As New Commande
            lacomande.NumTable = i + 1
            lacomande.Total = 0
            commandes.Add(lacomande)
        Next 



Réponse trouvée ->Question Résolue
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
Modifié par evilfalcon le 10/11/2015 à 19:36
ok! je pense comprendre, dit moi si je me trompe!!!
je crée une et une seul variable de type commande qui a une seul adresse, et à chaque itérations j'ajoute la même adresse dans la liste, donc les 5 éléments de ma liste ont les adresses, ils sont donc identiques.

Ça ma l'air logique, je teste:
Et ça marche, merci bien!
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
10 nov. 2015 à 19:22
C'est ça.
Pense à passer ton sujet résolu.
0