Labeltext reseten?

  • VB6

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Joa, geht ja mit meinem Code auch, nur halt nicht mehr mit ner Formel.
    Ob nun richtiges LINQ mit Aggregate Into oder die IEnumerable-Ext. mit Take und Sum. Who cares.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Ich kann es zum Glück mit beiden Codes anwenden. Der Code sieht jetzt so aus:
    Es sind sechs CheckedListboxen und sechs Labels. Ich schreibe hier aber nur den Code für zwei Checkedlistboxen der Einfachheit halber.
    Sobald die Checkedlistboxen gecheckt werden, ändert sich der zugehörige Label zum Zahlenergebniss. Dies variert nach Anzahl der gecheckten Einheiten in der entsprechenden CheckedListbox.

    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
    Dim a() As Double = {15, 20, 20, 25, 25, 35, 40}

    Dim res As Double = a.Take(CheckedListBox1.CheckedItems.Count).Sum()

    Label1.Text = res.ToString()

    End Sub

    Private Sub CheckedListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox2.SelectedIndexChanged
    Dim b() As Double = {15, 20, 20, 25, 25, 35, 40}

    Dim ses As Double = b.Take(CheckedListBox2.CheckedItems.Count).Sum()

    Label2.Text = ses.ToString()

    End Sub

    Nun sollen Label1 und Label2 in "Live-Addition" entsprechend den aktuellen Werten in (l1 und l2) in Label 3 addiert werden.

    Dazu mein Vorschlag:

    Private Sub Label10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label10.Click
    Dim ergebnis As Double
    Dim Wandler As String
    Dim Dob As Double
    Dim Wanderli As String
    Dim Dobi As Double

    Wandler = Label1.Text
    Dob = CDbl(Label1.Text)

    Wanderli = Label2.Text
    Dobi = CDbl(Wanderli)

    ergebnis = Dob + Dobi

    Label3.Text = ergebnis.ToString
    End Sub


    Klappt aber leider nicht...
    Ich kann es zum Glück mit beiden Codes anwenden. Der Code sieht jetzt so aus:
    Es sind sechs CheckedListboxen und sechs Labels. Ich schreibe hier aber nur den Code für zwei Checkedlistboxen der Einfachheit halber.
    Sobald die Checkedlistboxen gecheckt werden, ändert sich der zugehörige Label zum Zahlenergebniss. Dies variert nach Anzahl der gecheckten Einheiten in der entsprechenden CheckedListbox.

    Quellcode

    1. Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
    2. Dim a() As Double = {15, 20, 20, 25, 25, 35, 40}
    3. Dim res As Double = a.Take(CheckedListBox1.CheckedItems.Count).Sum()
    4. Label1.Text = res.ToString()
    5. End Sub
    6. Private Sub CheckedListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox2.SelectedIndexChanged
    7. Dim b() As Double = {15, 20, 20, 25, 25, 35, 40}
    8. Dim ses As Double = b.Take(CheckedListBox2.CheckedItems.Count).Sum()
    9. Label2.Text = ses.ToString()
    10. End Sub


    Nun sollen Label1 und Label2 in "Live-Addition" entsprechend den aktuellen Werten in (l1 und l2) in Label 3 addiert werden.

    Dazu mein Vorschlag:

    Quellcode

    1. Private Sub Label10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label10.Click
    2. Dim ergebnis As Double
    3. Dim Wandler As String
    4. Dim Dob As Double
    5. Dim Wanderli As String
    6. Dim Dobi As Double
    7. Wandler = Label1.Text
    8. Dob = CDbl(Label1.Text)
    9. Wanderli = Label2.Text
    10. Dobi = CDbl(Wanderli)
    11. ergebnis = Dob + Dobi
    12. Label3.Text = ergebnis.ToString
    13. End Sub


    Label 3 bleibt einfach so stehen...es rührt sich nichts...

    VB.NET-Quellcode

    1. Private Sub
    2. CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object,
    3. ByVal e As System.EventArgs) Handles
    4. CheckedListBox1.SelectedIndexChanged,CheckedListBox2.SelectedIndexChanged,CheckedListBox3.SelectedIndexChanged...
    5. Dim a() As Double = {15, 20, 20, 25, 25, 35, 40}
    6. Dim res As Double = a.Take(DirectCast(sender,CheckedListBox).CheckedItems.Count).Sum()
    7. Label1.Text = res.ToString() 'musst nur noch hier an das richtige Label kommen
    8. End Sub

    ich bezweifle aber, dass die GUI gescheit aufgebaut ist, da könnte man mit UserControls sicherlich einiges lösen, wenn das alles so ähnlich aufgebaut ist.


    Label3 wird sich so natürlich nur ändern wenn du auf das Label10 klickst(um Himmelswillen ändere die Namen).
    Außerdem rechnet man nicht mit Steuerelementen. Speicher deine Ergebnise in Variablen(mit entsprechendem Datentyp) und addiere diese, Labels sind dann nur für die Anzeige da.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl

    Quellcode

    1. Handles
    2. CheckedListBox1.SelectedIndexChanged,CheckedListBox2.SelectedIndexChanged,CheckedListBox3.SelectedIndexChanged...

    hier wird ein Fehler angezeigt. Wieso stehen alle CheckedListBox.SelectedIndexChanged direkt so hintereinander!? ab CheckedListBox2.SelectedIndexChanged werden die bei mir unterstrichen mit dem Fehler:

    Fehler 3 "Public Event SelectedIndexChanged(sender As Object, e As System.EventArgs)" ist ein Ereignis und kann nicht direkt aufgerufen werden. Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen.

    Weiteres: Oben sollte das Label10 eigentlich Label 3 sein...

    "Musst nur noch an das richtig Label kommen" - was heißt das

    Man es macht mich platt dass es nicht funzt... : /
    das muss alles in einer Zeile stehen:

    VB.NET-Quellcode

    1. Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckedListBox1.SelectedIndexChanged,CheckedListBox2.SelectedIndexChanged,CheckedListBox3.SelectedIndexChanged
    Ja, das ist eine sehr lange Codezeile, aber ist doch egal.
    was da so viel hintereinander steht das ist die Handles-Klasusel. Fängt an mit "Handles", und dann folgt die Auflistung der Events, die von dieser Methode alle behandelt werden.
    Nämlich vonne CheckedListBox1 soll das SelectedIndexChanged-Event behandelt werden, und vonne CheckedListBox2 das SelectedIndexChanged-Event, und vonne CheckedListBox2 das SelectedIndexChanged-Event, und vonne CheckedListBox3 das SelectedIndexChanged-Event, usw.
    Jo, das steht da, und muss da auch stehen.
    Bei mir ist das alles in einer Zeile. Das könnte das Problem sein. Ich dachte CheckedListBox1 soll in Label1 schreiben CheckedListBox2 in Label2 usw.
    Aber wie gesagt als erstes sollte man vmtl. das ganze mit UserControls machen(zumindest so wie ich denke, dass du es vorhast) dürfte dann weniger Code übersichtlicher und schön sein.
    Vorrausgesetzt wie immer, dass die Control Namen auch mal etwas über das Control aussagen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Achso okay jetzt wirds mir klar mit dem handles.... Das klappt schon sehr gut fehlen nur noch ein paar Feinheiten...

    Bei der ausführung wird z.b. wenn die items der CLB1 hintereinander selected werden im "Endlabel" alles addiert.
    Selecte ich aber nun items von z.b. CLB2 wird das "Endlabel" leider wieder auf 0 gesetzt. Also die Summe que durch die CLBoxen klappt nicht.


    Und richtig klasse wäre noch für jede CLB ein Label der den aktuellen Wert der zugehörigen CLB anzeigt : ))

    Quellcode

    1. VB.NET-Quellcode
    2. Private Sub
    3. CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object,
    4. ByVal e As System.EventArgs) Handles
    5. CheckedListBox1.SelectedIndexChanged,CheckedListBox2.SelectedIndexChanged,CheckedListBox3.SelectedIndexChanged...
    6. Dim a() As Double = {15, 20, 20, 25, 25, 35, 40}
    7. Dim res As Double = a.Take(DirectCast(sender,CheckedListBox).CheckedItems.Count).Sum()
    8. Label1.Text = res.ToString() 'musst nur noch hier an das richtige Label kommen
    9. End Sub



    Bei der Ausführung wird z.b. wenn die Items der CLB1 hintereinander selected werden im "Endlabel" alles addiert.
    Selecte ich aber nun items von z.b. CLB2 wird das "Endlabel" leider wieder auf 0 gesetzt. Also die Summe que durch die CLBoxen klappt nicht.

    Und richtig klasse wäre noch für jede CLB ein Label der den aktuellen Wert der zugehörigen CLB anzeigt : ))
    ach das - da wies ich ja bereits in post#23 drauf hin, und weils nicht angekommen war, noch einmal in post#28.
    Danach nicht mehr, denn das fortgesetzte Ignorieren lies mich annehmen, dass entweder ich das Problem falsch verstund, oder dasses dich nicht interessiert, oder dass du das mit der Zeit irgendwann auch mal selbst feststellen wirst.
    Und gelöst hatte ich das ja bereits in post#21

    Nochmal angepasst auf deinen aktuellen Code:

    VB.NET-Quellcode

    1. Private Sub CheckedListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CheckedListBox1.SelectedIndexChanged, CheckedListBox2.SelectedIndexChanged, CheckedListBox3.SelectedIndexChanged
    2. Dim a() As Double = {15, 20, 20, 25, 25, 35, 40}
    3. Dim clb = DirectCast(sender, CheckedListBox)
    4. Dim res = Aggregate i In clb.CheckedIndices.Cast(Of Integer)() Into Sum(a(i))
    5. Label1.Text = res.ToString()
    6. End Sub
    Funktioniert bei dir eigentlich der VB.Net-Button nicht? Oder warum stellst du deinen Code so unleserlich ein?