Compter les element dans une listboxceci veut à priori dire savoir combien il y a d'éléments dans ma listbox, et
la somme des element de ma liste boxceci fait plutôt penser à une colonne de nombres à faire la somme.....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionAssiette 1;12Attention sur mon PC, le symbole décimal, c'est la virgule, si tu utilises le point, il faut modifier le csv (ou gérer dans le code les 2 options, ce que je n'ai pas fait là).
Assiette 2;12,5
Dessert 1;4,75
Dessert 2;5,30
Imports System.IO Class Plat Public Property Prix() As Double Public Property Nom() As String ''' <summary> ''' Texte qui sera écrit dans la ListBox ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Overrides Function ToString() As String Return String.Format("{0} : {1:F2}$", Nom, Prix) End Function ''' <summary> ''' Lit et importe le fichier csv ''' </summary> ''' <param name="Fichier">Chemin du fichier</param> ''' <returns>Liste des plats</returns> Public Shared Function Deserialize(ByVal Fichier As String) As List(Of Plat) Dim lignes() As String = File.ReadAllLines(Fichier) 'lit le fichier et place chaque ligne dans un tableau de string Dim lesPlats As New List(Of Plat)() For Each l As String In lignes 'lit chauqe ligne Dim valeurs() As String = l.Split(";"c) 'découpe la ligne grâce au séparateur ; Dim lePlat As Plat = New Plat With {.Nom = valeurs(0), .Prix = Convert.ToDouble(valeurs(1))} lesPlats.Add(lePlat) 'ajoute l'instance dans la liste Next l Return lesPlats 'retourne la liste 'Pour info, une fois le principe bien acquis, tu pourras essayer de jouer avec Linq, ça tient sur une ligne. Return File.ReadAllLines(Fichier).Select(Function(l) l.Split(";"c)).Select(Function(x) New Plat With {.Nom = x(0), .Prix = Convert.ToDouble(x(1))}).ToList() End Function End Class
Private Sub monBouton_Click(ByVal sender As Object, ByVal e As EventArgs) Dim monBouton As Button = CType(sender, Button) Dim indexPlat As Integer = CInt(monBouton.Tag) laCommande.Add(lesPlats(indexPlat)) 'on ajoute un plat listBox1.DataSource = Nothing listBox1.DataSource = laCommande 'on binde la collection sur la listbox textBoxTotal.Text = laCommande.Sum(Function(c) c.Prix).ToString("F2") End Sub Private lesPlats As List(Of Plat) 'déclaration de la liste dont la portée englobe la form entière. Private laCommande As New List(Of Plat)() Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load lesPlats = Plat.Deserialize("C:\Temp\LesPlats.csv") 'import des données. 'création des boutons For i As Integer = 0 To lesPlats.Count - 1 Dim monBouton As New Button() monBouton.Location = New System.Drawing.Point(50, 35 * i + 50) monBouton.Size = New System.Drawing.Size(120, 30) monBouton.Text = lesPlats(i).Nom monBouton.Tag = i 'de façon à savoir à quel plat correspond le bouton AddHandler monBouton.Click, AddressOf monBouton_Click Me.Controls.Add(monBouton) Next i
AddHandler monBouton.Click, AddressOf Button_DoubleClick Private Sub Button_DoubleClick(sender As System.Object, e As System.EventArgs) ' On récupère le contrôle cliqué ... Dim textTmp As Button = DirectCast(sender, Button) MsgBox("Index " & textTmp.TabIndex) MsgBox("Bouton cliqué " & textTmp.Text) End Sub