Partage
  • Partager sur Facebook
  • Partager sur Twitter

Somme de variable d'une listbox

visual basic 2010 express

    9 mars 2011 à 15:59:18

    Bonjour,

    J'utilise des boutons pour insérer des articles et leur prix dans une listbox, et j'aimerai savoir si il est possible d'afficher la somme des prix une textbox, voici mon code

    Merci d'avance

    Public Class Form1
    
        Dim Prix1 As Double = 5.0
        Dim Prix2 As Double = 11.0
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            ListBox1.Items.Add("Article1            " & Prix1)
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    
            ListBox1.Items.Add("Article2            " & Prix2)
    
        End Sub
    
        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    
        End Sub
    End Class
    
    • Partager sur Facebook
    • Partager sur Twitter
      10 mars 2011 à 10:26:44

      Tien ton code :
      Public Class Form1
      
          Dim Prix1 As Double = 5.0
          Dim Prix2 As Double = 11.0
      
          Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
          End Sub
      
          Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
              ListBox1.Items.Add("Article1")
      Me.TextBox1.text = Prix1
      
          End Sub
      
          Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      
              ListBox1.Items.Add("Article2" & )
      Me.TextBox2.text = Prix2
      
          End Sub
      
          Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
      
          End Sub
      End Class
      
      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2011 à 11:42:22

        endyx : Je ne pense pas que ce que tu vien de lui donné comme code est ce qu'il recherche. Je pense qu'il veux faire la somme de tous les prix de sa listview (en gros la somme d'une collones).
        • Partager sur Facebook
        • Partager sur Twitter
          10 mars 2011 à 14:54:51

          Bonjour,

          Merci pour vos réponses mais effectivement ce n'est pas ce que j'ai besoin, il me faut une seule textbox avec la somme des prix de la listbox.

          Entre temps j'ai trouvé le code pour faire la somme, mais je n'arrive pas à faire une colonne à gauche pour les articles et une à droite pour les prix, j'ai aussi ajouter un bouton3 pour effacer la ligne selectionnée mais si une ligne identique se trouve au dessus, ça m'efface la première, comment faire pour effacer vraiment celle selectionnée?

          Voici mon nouveau code:


          Public Class Form1
          
              Dim Prix1 As Double = 5.0
              Dim Prix2 As Double = 11.5
          
              Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          
              End Sub
          
              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          
                  ListBox1.Items.Add(Prix1)
          
                  Dim Somme As Double
          
                  For Each Elem As Object In Me.ListBox1.Items
          
                      Somme += CInt(Elem)
          
                  Next
          
                  Me.TextBox1.Text = Somme.ToString
              End Sub
          
              Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
          
                  ListBox1.Items.Add(Prix2)
          
                  Dim Somme As Double
          
                  For Each Elem As Object In Me.ListBox1.Items
          
                      Somme += CInt(Elem)
          
                  Next
          
                  Me.TextBox1.Text = Somme.ToString
              End Sub
          
              Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
          
                  Me.ListBox1.Items.Remove(Me.ListBox1.SelectedItem)
          
                  Dim Somme As Double
          
                  For Each Elem As Object In Me.ListBox1.Items
          
                      Somme += CInt(Elem)
          
                  Next
          
                  Me.TextBox1.Text = Somme.ToString
              End Sub
              End Class
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            12 mars 2011 à 9:24:09

            Bonjour,

            Tout d'abord si tu utilises une ListBox sache qu'elle ne peut pas afficher plusieurs colonnes "physiques". Il y a une option Multicolonnes, mais en réalité elle sert simplement à évité un Scroll vertical, c'est-à-dire qu'au lieu de tout afficher sur une seule même colonne avec un "ascenceur" sur la droite la ListBox va créer plusieurs colonnes pour afficher tes infos.

            Tu peux toujours traiter les informations de ta ListBox, dans ta première version du code tu avais concaténé les "Article" et leur prix correspondant, cela te donnait un semblant de colonne. Tu peux toujours utiliser cette méthode en utilisant un Split() par la suite pour découper ta CHaine de caractère et récupérer le prix, ensuite tu réutilise ta méthode pour la somme (qui est bonne! ;) ) et le tour est joué.

            Si par contre tu veux absolument deux colonnes ( ce qui est plus propre ), utilise une "ListVIEW" qui elle prend en charge les colonnes, par contre l'utilisation est légèrement différente.

            Si tu as du courage :)
            MSDN

            Voilà j'espère que a défaut d'une réponse je t'aurais apporté des pistes.

            Bonne fin de journée!!
            • Partager sur Facebook
            • Partager sur Twitter
              13 mars 2011 à 9:38:26

              Bonjour King Skull,

              Merci pour ta réponse, j'essai donc de faire une listview, mais impossible d’écrire mes 2 colonnes comme je veux, j'ai cherché sur le forum et sur le msdn mais j'ai rien trouvé qui puisse m'aider.

              J'ai vu sur le net qu’apparemment il n'est possible d’éditer uniquement la première colonnes d'une listview, je cite: "le listview (comme celui de l'explorateur Windows) a été conçu principalement pour travailler avec des fichiers, et on ne peut éditer (lors ce que le programme est lancé) que la première colonne."

              Pourrez tu svp me donner un petit exemple de code pour écrire dans 2 colonnes?

              Merci d'avance


              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                13 mars 2011 à 11:50:12

                Bonjour DavidF,

                Je me suis un peu précipité hier en partant sur le "ListView" ( J'ai voulu faire vite :( désolé...). Donc en y réfléchissant bien, l'outil le plus adéquat pour ce que tu veux réaliser. C'est un "DataGrid" car après tout c'est son boulot :) , et au final ce sera plus simple pour toi d'exploiter ces données. Ajout modification lecture bref...

                Etant donné que c'est moi qui t'es envoyé sur une fausse piste je vais te filer les lignes de code principale pour créer tes colonnes, ajouter tes données et les lire (c'est de bonne guerre ^^ )

                Ici je part du principe que tu as créer un DataGridView nommé .... DatagriView1 (facile) et une TextBox

                'Ajout des colonnes
                  'En premier argument le nom de la Colonne pour y accéder dans le code, c'est un peu son ID. Ensuite le nom 
                  'afficher de la colonne le "header"
                  Me.DataGridView1.Columns.Add("articleColumn" , "Article")
                  Me.DataGridView1.Columns.Add("prixColumn" , "Prix")
                
                  'Maintenant je rajoute une ligne une "Row". Très important!! Il faut toujours ajouter une ligne avant de 
                  'vouloir y ajouter des informations!
                  Me.DataGridView1.Rows.Add()
                  
                  'Une ligne a été créé je peut donc y ajouter des infos
                  'En premier argument le nom de la colonne donc son ID
                  'En deuxième paramêtre l'index de la ligne a modifier (l'index d'un DataGrid commence a 0!!) 
                  Me.DataGridView1.Item("articleColumn",0).Value = "Article1" 'Ou la valeur d'une TextBox..
                  Me.DataGridView1.Item("prixColumn",0).Value = 32 'Ou la valeur d'une TextBox convertit en Integer
                  
                  'Une deuxième ligne... donc Index 1
                  'Rajout d'une ligne
                  Me.DataGridView1.Rows.Add()
                  'On remplit
                  Me.DataGridView1.Item("articleColumn",1).Value = "Article2" 'Ou la valeur d'une TextBox..
                  Me.DataGridView1.Item("prixColumn",1).Value = 33 'Ou la valeur d'une TextBox convertit en Integer
                
                  'Petit exemple pour te montrer comment l'on accède à une valeur
                  Dim _exString as String
                  _exString = Me.DataGridView1.Item("articleColumn",0).Value.ToString
                  MessageBox.Show(_exString ,"Test")
                
                  'Maintenant ta boucle pour le total des prix
                  Dim _totalPrix As Integer
                  _totalPrix = 0
                
                  For Each _dataRow As DataGridViewRow In Me.DataGridView1.Rows
                      _totalPrix = _totalPrix + _dataRow.Cells("prixColumn").Value
                  Next
                
                  'Affichage du résultat dans une TextBox
                  Me.TextBox1.Text = _totalPrix
                


                Je dois te préciser que si tu recopie directement le Code fait attention il peut il y avoir des erreurs, j'ai copier ça directement à la main je n'ai pas Visual Studio sur ce PC ^^

                Voilà encore désolé de t'avoir induit en erreur hier, j'espère que avec ceci tu pourras coder dans la joie et la bonne humeur, et surtout avec un outil adapté!

                A+
                • Partager sur Facebook
                • Partager sur Twitter
                  13 mars 2011 à 13:57:52

                  J'ai donc essayé avec le DataGrid, grand merci pour avoir écrit toutes ces lignes de code, je les ai tourné dans tous les sens mais ça écrit uniquement sur les 2 premières lignes
                  Je me demande en fin de compte si la listbox avec le split() ne serait pas mieux

                  je n'arrive pas à placer les le split() pour récupérer le prix et faire la somme

                  J'ai pourtant le tuto du zero pour apprendre les bases mais j'avoue avoir vraiment du mal sur des détails certainement basique

                  Peut tu m'aider pour le split()?


                  ListBox1.Items.Add("Article1" & Prix1)
                          Dim Somme As Double
                          For Each Elem As Object In Me.ListBox1.Items
                              Somme += CInt(Elem)
                          Next
                          Me.TextBox1.Text = Somme.ToString
                  

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    13 mars 2011 à 16:30:10

                    Désolé de persisté mais le Datagrid est quand même préférable.

                    Dans le code que je t'ai donné je ne t'ai fourni que des outils,et effectivement je n'ajoute que deux lignes a toi de créer des méthode qui te permette d'ajouter supprimmer une ligne avec un clique bouton. Le problème du système avec Split() c'est que c'est de la bidouille.
                    Et cela implique de mettre un caractère de séparation pour pouvoir récupérer tes valeurs.

                    Ta chaine ressemble a ça "Article1 5.0", ici tu n'as pas de caractère de séparation valable pour faire un split() il faudrait ransformer ta chaine comme suis: "Article:5.0" ":" sera le caractère de séparation pour le Split().

                    Donc moi je te propose de te fournir une méthode pour ajouter des ligne dans le datagrid et la solution avec le Split() si jamais tu veux persister avec cette solution, mais je te le déconseille.

                    Méthode Datagrid: Il suffit de la placer dans Public Class de ta fenêtre principale et ensuite l'appeler depuis une méthode Private Sub Button_Click(.....) J'ai rajouter la possibilité de nommé directement l'article que tu enregistre en passant un String en paramètre
                    'Tu peux passer un nom d'article en paramêtre
                      Private Sub AddElement(ByVal _nomArticle As String)
                        'Cette variable contiendra le nombre totale de ligne
                        Dim _rowCount As Integer
                    
                        'On ajoute une ligne
                        Me.DataGridView1.Rows.Add()
                        'On enregistre le nombre de ligne totale après l'ajout afin de savoir ou ajouter nos informations
                        _rowCount = Me.DataGridView1.RowCount
                    
                        'On ajoute les informations dans la nouvelle ligne dont l'index est forcement (_rowCount - 1)
                        ' on retire 1 car l'index d'un Datagrid commence a Zero
                         Me.DataGridView1.Item("articleColumn", _rowCount - 1).Value = _nomArticle
                        'Pour le prix je vais chercher la valeur dans une autre TextBox ou tu peux mettre la valeur que tu 
                        'souhaite
                         Me.DataGridView1.Item("prixColumn",_rowCount - 1).Value = CInt(Me.TextBox3.Text)
                      End Sub
                    


                    Pour utiliser cette méthode il suffit de l'appeler dans le code de ton Button_click en écrivant simplement
                    AddElement("Ballon") ici le nom de l'article sera Ballon le prix sera saisi dans une TextBox

                    Si tu souhaite tout de même utiliser un split et bien voici l'autre solution adaptée a ton code.

                    ListBox1.Items.Add("Article1:" & Prix1) 'J'ai rajouté le caractére ":" pour le Split()
                            Dim Somme As Double
                            Dim _stringTab As Array
                    
                            For Each Elem As Object In Me.ListBox1.Items
                                _stringTab = Split(Elem, ":" , 2)
                                Somme += CInt(_stringTab(1))
                            Next
                            Me.TextBox2.Text = Somme
                    


                    Split() te renvoi un tableau contenant les chaine situé de chaque coté du caractère de séparation donc ici nous auront deux chaine je récupère donc le prix situé dans la deuxième case du tableau renvoyé. _stringTab(1), je met 1 car l'index commence a 0 !!

                    Voila!! Courage et essaye tout de même d'utiliiser le Datagrid, c'est ce qu'il y a de mieux. Après ce n'est que mon avis
                    A+
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 mars 2011 à 18:07:42

                      Super, merci pour les codes.
                      Effectivement il faut rajouter un caractère de séparation, mais avec la listbox l'article est attaché au prix et je peux donc supprimé une ligne entière directement, tandis que le Datagrid fait plusieurs case séparées.
                      Par contre, si je ne me trompe pas sur cette photo c'est bien une listbox??
                      Pourtant pas de caractère de séparation! Comment est-ce possible?

                      Image utilisateur
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        13 mars 2011 à 19:36:31

                        Une ligne de DataGrid est composé de plusieurs cases individuels c'est vrai. Mais cependant tu peux simplement supprimer une ligne entière en donnant son index.

                        Me.DataGridView.Rows.RemoveAt(Index de la ligne)

                        Pour ce qui est de ton image je ne sais même pas en quel langage c'est codé ^^

                        Mais effectivement il semblerait que ce soit un listBox, mais rien ne te dit que les valeur ne soit pas enregistrés dans un tableau contenant une structure produit. dans ce cas la liste ne sert qu'a afficher le contenu de ce tableau.

                        Mais la il va falloir, te renseigner plus en détail je ne vais pas te faire un cours ^^
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Somme de variable d'une listbox

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown