ListBox Zahlen Addieren

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    ListBox Zahlen Addieren

    Hallo mal wieder
    hätte diesmal die Frage, wie ich es hinkriegen kann, die Einträge (Preise) in der Listbox2 also die kleine (Bezeichnet als LBPreis) zu Addieren und in der TextBox (TBSumme) als Gesamtpreis auszugeben? Ausserdem wenn wir schon dabei sind wie wäre der code zur löschung einzelner artikel durch die Taste LETZTEN ARTIKEL LÖSCHEN? (Bild im Anhang) Danke für euere Hilfen.
    Bilder
    • Wasta-Concession.jpg

      32,69 kB, 318×612, 182 mal angesehen
    Zum Addieren aller Werte in der Listbox musst du:

    VB.NET-Quellcode

    1. Dim Gesamtpreis As Double
    2. For Each item In ListBox2.Items
    3. Gesamtpreis = Gesamtpreis + item
    4. Next
    5. MessageBox.Show(Gesamtpreis)


    Die Werte in einer Schleife addieren.

    EDIT:

    Löschen kannst du das ausgewählte mit:

    VB.NET-Quellcode

    1. ListBox2.Items.RemoveAt(ListBox2.SelectedItem)
    @shaebich: Nein, ganz bestimmt nicht. Das ist übelster OPTION STRICT OFF-Code.

    @von-kirschner: Das, was Du da hast, ist eine Datenverarbeitung und Daten gehören in Klassen oder in eine DataTable innerhalb eines DataSets. Zeig am besten den Code, den Du bisher hast, dann sagen wir Dir, wie Du es verbessern kannst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hier also so das 'Option Strict On' nicht moniert ^^:

    VB.NET-Quellcode

    1. Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
    2. Dim gesamtBetrag As Double
    3. For Each Item As Object In ListBox1.Items
    4. gesamtBetrag += System.Convert.ToDouble(Item)
    5. Next
    6. MessageBox.Show(gesamtBetrag.ToString)
    7. End Sub

    SpaceyX schrieb:

    @shaebich: Nein, ganz bestimmt nicht. Das ist übelster OPTION STRICT OFF-Code.

    @von-kirschner: Das, was Du da hast, ist eine Datenverarbeitung und Daten gehören in Klassen oder in eine DataTable innerhalb eines DataSets. Zeig am besten den Code, den Du bisher hast, dann sagen wir Dir, wie Du es verbessern kannst.

    Wir wollen ja auch nicht aus einer Mücke eine Elefanten machen oder? :D

    Wegen 3 Zahlen addieren braucht man doch nicht gleich ein vollständiges Kassensystem zu programmieren.
    @shaebich: Warum sollte man sich in eine Sackgasse programmieren, wenn es hier Leute gibt, die einem dabei helfen können, es wirklich anständig zu machen? Das hat nichts mit übertreiben zu tun, sondern liegt einfach daran, dass es manchen Menschen hier wirklich am Herzen liegt, dass ein Hilfesuchender etwas lernt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    am ende ist doch option strict on nur sympthombekämpfung und keine ursachenforschung. wenn der code implizit nicht läuft wird er explizit erst recht nicht laufen.

    das addieren kann auch so gehen:

    VB.NET-Quellcode

    1. dim GP as double=0
    2. For i As Integer = 0 To ListBox1.Items.Count-1 Step 1
    3. GP=GP+Double.Parse(ListBox1.Items(i).ToString)
    4. Next


    und den letzten artikel löschen

    VB.NET-Quellcode

    1. ListBox1.Items.RemoveAt(ListBox1.Items.Count-1)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „affrop“ ()

    strict On ist keine ursachenforschung oder sympthombekämpfung, sondern eine Schlampigkeits-Bekämpfung.
    Strict Off-Coder haben meist massive Probleme, die Datentypen, die sie verwenden, überhaupt zu identifizieren.
    Da gehört Strict On zu den Grundlagen aller Ursachenforschung, denn ohne deine Datentypen zu kennen, wirst du auch keine Fehler-Ursachen finden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    da hast du natürlich recht. wobei die meisten datentypvermischungen "verzweiflungstaten" sind, die aus unkontrolliertem herumgespiele im code resultieren, weil der coder aus unwissenheit über die funktionalität der verwendeten befehle krampfhaft den fehler lösen will und dabei seine anfängliche deklaration im eifer des gefechts gänzlich außer acht lässt.
    aber gut nun, dieses thema würden ein separates forum für sich füllen.

    hier sind wir jetzt bei listboxen.
    ja, und haben auch ein ganz ähnliches Problem: Was für datentypen sind denn drinne in der Listbox? 8|

    Es können ja Strings sein - dafür hast du gecodet, aber können auch Integer sein. Oder Double. Und bei Databinding können auch ganze Datensätze drinne sein.

    Imo grundfalsch ist nämlich bereits die Herangehensweise: Kein Datenmodell, und dann versucht man sich mit den Controls so durchzuwursteln.
    naja - auf einen tragfähigeren Ansatz habichja schon in post#4 verlinkt.
    naja, da er im ersten post schreibt, dass in zumindest einer der beiden listboxen ein preis stehen soll, kann man zumindest von integer ausgehen. spielt aber gar keine rolle, denn wenn der wert des items aus der liste gelesen wird kommt es zwangsweise zum string (.ToString) und dann muss sowieso geparst werden um weiter rechnen zu können. in meinem fall wars double.
    um ganz sicher zu gehen, kann der string noch auf unerwünschte zeichen geprüft werden, z.b währungssymbole etc., die dann noch rausgefiltert werden müssen.

    Don_Batisto schrieb:

    Hier also so das 'Option Strict On' nicht moniert ^^:

    VB.NET-Quellcode

    1. Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
    2. Dim gesamtBetrag As Double
    3. For Each Item As Object In ListBox1.Items
    4. gesamtBetrag += System.Convert.ToDouble(Item)
    5. Next
    6. MessageBox.Show(gesamtBetrag.ToString)
    7. End Sub


    und wie krige ich eine "," stelle rein ?
    und wie krige ich eine "," stelle rein ?


    VB.NET-Quellcode

    1. Private myTable As New DataTable()
    2. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. With myTable.Columns
    4. .Add("DisplayValue", GetType(Decimal))
    5. End With
    6. ListBox1.DisplayMember = "DisplayValue"
    7. myTable.Rows.Add("14,00")
    8. myTable.Rows.Add("16,13")
    9. myTable.Rows.Add("1,40")
    10. myTable.Rows.Add("14,85")
    11. ListBox1.DataSource = myTable
    12. ListBox1.FormatString = "N2"
    13. End Sub
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. MsgBox(SumUp(myTable).ToString("c"))
    16. End Sub
    17. Public Function SumUp(ByVal TB As DataTable) As Decimal
    18. Dim SumVal As Decimal = 0
    19. For Each Rw As DataRow In TB.Rows
    20. SumVal += Convert.ToDecimal(Rw("DisplayValue"))
    21. Next
    22. Return SumVal
    23. End Function


    sollte so besser gehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kasi“ ()

    ByVal braucht man nicht, MsgBox ist VB6 und
    alte Threads für neue Probleme zu kapern ist im Forum tabu -> @Nico(Nano.exe): das nächste Mal bitte einen eigenen Thread aufmachen und keine alten Dinger ausgraben.
    Thread closed.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.