Spar-Dose problem beim Rechnen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Luftpost.

    Spar-Dose problem beim Rechnen

    Ich habe folgende frage...

    Und Zwar hab ich das Problem das wenn ich auf ein [+] Sympol in meiner Anwenung bestätige das er unter "In Dose" das nicht bei sich behält :/

    Beispiel siehe Screen:

    Und da möchte ich das er unten in dem Label das zusammen rechnet wenn ich beispielsweise auf 50Cent oder 2Cent klicke das er beispielsweise:

    3xKlick auf 50Cent => Anzeige: 1,50 €
    6xKlick auf 2Cent => Anzeige: 1,62 €

    Aber derzeit übernimmt er immer dann nur die Letzen Klicks :/

    Auch möglich das mein Code etwas Schrott/Murks ist :D
    Aber Ich lerne ja noch :P

    Der VB-Code Komplett

    VB.NET-Quellcode

    1. Public Class SparDose
    2. Dim InDose As Double = 0
    3. Public Zwischen As Double = 0
    4. Public Gesamt As Double = 0
    5. Dim Edit As String
    6. Private Sub RechnenPlus(ByVal Typ As TextBox, ByVal value As Double, ByVal Pro As Integer)
    7. If value < 99 Then
    8. value = value + 1
    9. Typ.Text = value.ToString
    10. lbl_InDose.Text = FormatNumber(value / Pro, 2) & " €"
    11. End If
    12. InDose = value / Pro
    13. My.Settings.InDose = CStr(CDbl(My.Settings.InDose) + CDbl(lbl_InDose.Text))
    14. My.Settings.Save()
    15. End Sub
    16. Private Sub RechnenMinus(ByVal Typ As TextBox, ByVal value As Double, ByVal Pro As Integer)
    17. If value > -99 Then
    18. value = value - 1
    19. Typ.Text = value.ToString
    20. lbl_InDose.Text = FormatNumber(value / Pro, 2) & " €"
    21. End If
    22. InDose = value / Pro
    23. My.Settings.InDose = CStr(CDbl(My.Settings.InDose) - CDbl(lbl_InDose.Text))
    24. My.Settings.Save()
    25. End Sub
    26. Private Sub RechneGesamtPlus(ByVal oldValue As Double, ByVal newValue As Double)
    27. Zwischen = oldValue
    28. Gesamt = CDbl(Zwischen) + CDbl(newValue)
    29. My.Settings.GesamtInDose = FormatNumber(Gesamt, 2) & " €"
    30. lbl_GesamtDose.Text = FormatNumber(Gesamt, 2) & " €"
    31. My.Settings.InDose = "0,00 €"
    32. My.Settings.Save()
    33. End Sub
    34. Private Sub RechneGesamtMinus(ByVal oldValue As Double, ByVal newValue As Double)
    35. Zwischen = oldValue
    36. Gesamt = CDbl(Zwischen) - CDbl(newValue)
    37. My.Settings.GesamtInDose = FormatNumber(Gesamt, 2) & " €"
    38. lbl_GesamtDose.Text = FormatNumber(Gesamt, 2) & " €"
    39. My.Settings.InDose = "0,00 €"
    40. My.Settings.Save()
    41. End Sub
    42. Private Sub SetTextNull()
    43. Dim ButtonGroups() As TextBox = New TextBox() {Cent_1, Cent_2, Cent_5, Cent_10, Cent_20, Cent_50, Euro_1}
    44. For i = 0 To 7 - 1 Step 1
    45. ButtonGroups(i).Text = "0"
    46. Next i
    47. End Sub
    48. Private Sub btn_1_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_1_Cent_Plus.Click
    49. RechnenPlus(Cent_1, CDbl(Cent_1.Text), 100)
    50. InDose += CDbl(Cent_1.Text)
    51. End Sub
    52. Private Sub btn_1_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_1_Cent_Minus.Click
    53. RechnenMinus(Cent_1, CDbl(Cent_1.Text), 100)
    54. InDose -= CDbl(Cent_1.Text)
    55. End Sub
    56. Private Sub btn_Save_Click(sender As System.Object, e As System.EventArgs) Handles btn_Save.Click
    57. RechneGesamtPlus(CDbl(My.Settings.GesamtInDose), CDbl(lbl_InDose.Text))
    58. My.Settings.InDose = lbl_InDose.Text
    59. lbl_GesamtDose.Text = My.Settings.GesamtInDose
    60. My.Settings.Save()
    61. lbl_InDose.Text = "0,00 €"
    62. SetTextNull()
    63. End Sub
    64. Private Sub btn_Clear_Dose_Click(sender As System.Object, e As System.EventArgs) Handles btn_Clear_Dose.Click
    65. My.Settings.InDose = "0,00 €"
    66. My.Settings.GesamtInDose = "0,00 €"
    67. My.Settings.Save()
    68. lbl_InDose.Text = "0,00 €"
    69. lbl_GesamtDose.Text = "0,00 €"
    70. End Sub
    71. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    72. lbl_InDose.Text = FormatNumber(CDbl(My.Settings.InDose) / 100, 2) & " €"
    73. lbl_GesamtDose.Text = My.Settings.GesamtInDose
    74. End Sub
    75. Private Sub Blue_Button1_Click(sender As System.Object, e As System.EventArgs) Handles Blue_Button1.Click
    76. MsgBox("Eingezahlt wurde: " & My.Settings.InDose & vbCrLf & "Gesamt in der Dose: " & My.Settings.GesamtInDose)
    77. End Sub
    78. Private Sub EditDose(sender As System.Object, e As System.EventArgs) Handles lbl_GesamtDose.DoubleClick
    79. Edit = InputBox("Gebe den Betrag ein!", "Betrag ändern", lbl_GesamtDose.Text)
    80. My.Settings.GesamtInDose = Edit
    81. My.Settings.Save()
    82. lbl_GesamtDose.Text = Edit
    83. End Sub
    84. Private Sub EditOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbl_GesamtDose.MouseHover
    85. lbl_GesamtDose.Cursor = Cursors.IBeam
    86. End Sub
    87. Private Sub EditOff(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbl_GesamtDose.MouseLeave
    88. lbl_GesamtDose.Cursor = Cursors.Default
    89. End Sub
    90. Private Sub btn_2_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_2_Cent_Plus.Click
    91. RechnenPlus(Cent_2, CDbl(Cent_2.Text), 50)
    92. End Sub
    93. Private Sub btn_2_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_2_Cent_Minus.Click
    94. RechnenMinus(Cent_2, CDbl(Cent_2.Text), 50)
    95. End Sub
    96. Private Sub btn_5_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_5_Cent_Plus.Click
    97. RechnenPlus(Cent_5, CDbl(Cent_5.Text), 20)
    98. End Sub
    99. Private Sub btn_5_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_5_Cent_Minus.Click
    100. RechnenMinus(Cent_5, CDbl(Cent_5.Text), 20)
    101. End Sub
    102. Private Sub btn_10_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_10_Cent_Plus.Click
    103. RechnenPlus(Cent_10, CDbl(Cent_10.Text), 10)
    104. End Sub
    105. Private Sub btn_10_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_10_Cent_Minus.Click
    106. RechnenMinus(Cent_10, CDbl(Cent_10.Text), 10)
    107. End Sub
    108. Private Sub btn_20_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_20_Cent_Plus.Click
    109. RechnenPlus(Cent_20, CDbl(Cent_20.Text), 5)
    110. End Sub
    111. Private Sub btn_20_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_20_Cent_Minus.Click
    112. RechnenMinus(Cent_20, CDbl(Cent_20.Text), 5)
    113. End Sub
    114. Private Sub btn_50_Cent_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_50_Cent_Plus.Click
    115. RechnenPlus(Cent_50, CDbl(Cent_50.Text), 2)
    116. End Sub
    117. Private Sub btn_50_Cent_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_50_Cent_Minus.Click
    118. RechnenMinus(Cent_50, CDbl(Cent_50.Text), 2)
    119. End Sub
    120. Private Sub btn_1_Euro_Plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_1_Euro_Plus.Click
    121. RechnenPlus(Euro_1, CDbl(Euro_1.Text), 1)
    122. End Sub
    123. Private Sub btn_1_Euro_Minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_1_Euro_Minus.Click
    124. RechnenMinus(Euro_1, CDbl(Euro_1.Text), 1)
    125. End Sub
    126. End Class



    Vielleicht hat ja einer eine oder mehrere Ideen wie ich es komfortabler gestalten kann :)

    MfG

    LuftPost
    My.Settings.Wert As Integer definieren.
    Dann:

    VB.NET-Quellcode

    1. Private Sub BtnPlus50_Click Handles BtnPlus50.Click
    2. My.Settings.Wert = My.Settings.Wert + 0.50
    3. My.Settings.Save
    4. LblWert.Txt = Convert.ToString(My.Settings.Wert)
    5. End Sub


    Hab grade meine Sourcetage ^^
    :D

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Nikx schrieb:

    My.Settings.Wert As Integer definieren

    und zu dem Integer rechnen wir dann 0,5 un das gibt dann einen Integer???
    Und da meckert das Programm bei Option Strict On nicht? Integer sind GANZZahlen, da kann man keine single zu addieren und dann glauben es kommt wieder ein INteger bei raus.
    BTT...
    Bitte trenne Daten und GUI... dann brauchste auch nich als irgendwelchen Kram von String in Double zu konvertieren un zurück.
    Als Tips...
    Lege dir für die Werte ein Dictionary( of button, integer) (oder double wie du willst) an.
    Einen Settingswert, der dein Gesamtsparguthaben enthält, ggf mehrere Settungs für die einzelnen Wertigkeiten... (btw. 2€ Münzen gibts nich?)

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

    Sry, stimmt.
    Glaubst du ich teste das? :D
    Nein, aber im Ernst, ich arbeite kaum mit Integer, Double, usw.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    FloFuchs schrieb:

    Nikx schrieb:

    My.Settings.Wert As Integer definieren

    und zu dem Integer rechnen wir dann 0,5 un das gibt dann einen Integer???
    Und da meckert das Programm bei Option Strict On nicht? Integer sind GANZZahlen, da kann man keine single zu addieren und dann glauben es kommt wieder ein INteger bei raus.
    BTT...
    Bitte trenne Daten und GUI... dann brauchste auch nich als irgendwelchen Kram von String in Double zu konvertieren un zurück.
    Als Tips...
    Lege dir für die Werte ein Dictionary( of button, integer) (oder double wie du willst) an.
    Einen Settingswert, der dein Gesamtsparguthaben enthält, ggf mehrere Settungs für die einzelnen Wertigkeiten... (btw. 2€ Münzen gibts nich?)


    Na das wollte ich machen wenn soweit alles funktioniert weil ich es erst mal testen will, wollte :D
    Kannst du mir bei dem Dictionary ein Beispiel geben Bitte? :)

    Das mit den Settings die einzelnen werten Speichern ist zwar eine Idee wert :)
    Die 2Euro kommen auch noch xD

    Aber in meinem Programm entfällt sie erstmal nur :)

    @Nikx
    Warum mit Integer oO
    Gleitkommazahlen lassen sich besser mit Double werten rechnen :)
    weil integer nich soviel Speicher verbrauchen... :D
    hier mal was zum rumspielen....
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private AmountDic As New Dictionary(Of Button, Integer)
    2. Sub setBalance(ByVal sender As Object, ByVal e As System.EventArgs)
    3. My.Settings.Balance += AmountDic(DirectCast(sender, Button))
    4. lblBalance.Text = (My.Settings.Balance / 100).ToString("C")
    5. End Sub
    6. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    7. With AmountDic
    8. .Add(btnOCM, -1)
    9. .Add(btnOCP, 1)
    10. .Add(btnTCM, -2)
    11. .Add(btnTCP, 2)
    12. .Add(btnFCM, -5)
    13. .Add(btnFCP, 5)
    14. .Add(btnTenCM, -10)
    15. .Add(btnTenCP, 10)
    16. .Add(btnTwCM, -20)
    17. .Add(btnTwCP, 20)
    18. .Add(btnFfCM, -50)
    19. .Add(btnFfCP, 50)
    20. .Add(btnOEM, -100)
    21. .Add(btnOEP, 100)
    22. .Add(btnTEM, -200)
    23. .Add(btnTEP, 200)
    24. End With
    25. For Each gb As GroupBox In Me.Controls.OfType(Of GroupBox)()
    26. For Each btn As Button In gb.Controls.OfType(Of Button)()
    27. AddHandler btn.Click, AddressOf setBalance
    28. Next
    29. Next
    30. End Sub
    @FloFuchs
    Danke für den Code :)

    Aber scheinbar funktioniert er nicht ;/
    Habe Alle Buttons erstellt auch das Lael und das Setting auf Int gestellt...
    Aber wenn ich auf eines der Buttons klicke funktioniert der Code nicht :D

    Oder hab Ich die Klick Events vergessen oO
    Aber eigentlich nicht weil der Code übergibt ja dann schon das Klick event über das Load-Form durch :)

    MfG

    LuftPost
    Kommt solch Code bei Dir vor?

    FloFuchs schrieb:

    VB.NET-Quellcode

    1. AddHandler btn.Click, AddressOf setBalance
    Setze in diese Prozedur einen Haltepunkt. Was passiert, wenn Du einen Button drückst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!