[VB.net] Probléme sur les list de class
Résolu
evilfalcon
Messages postés
76
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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)
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.
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
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
A voir également:
- [VB.net] Probléme sur les list de class
- List disk - Guide
- Directory list & print - Télécharger - Divers Utilitaires
- Comment faire une liste déroulante sur excel - Guide
- Logiciel de classement de photos gratuit - Guide
- Comment cacher sa liste d'amis sur facebook - Guide
1 réponse
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
Réponse trouvée ->Question Résolue
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
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!
Pense à passer ton sujet résolu.