Fehlermeldung bei Zahl in Textbox

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Fehlermeldung bei Zahl in Textbox

    Hallo,

    ich habe ein Problem, in folgenden Code Segment wird mir ein Fehler gezeigt (siehe Bild).
    Ich verstehe nicht, warum der Fehler in diesem Segment abgezeigt wird und in dem anderen nicht?
    ?(
    Nebenbei: Wäre es sinnvoller, generell eine andere Konvertierung der Zahlen anzuwenden?

    Freue mich über Feedback

    VB.NET-Quellcode

    1. Dim netA As Double = CDbl(tb_nettopA.Text), netB As Double = CDbl(tb_nettopB.Text)


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub b_calcp_Click(sender As Object, e As EventArgs) Handles b_calcp.Click
    2. Try
    3. 'deklaration
    4. Dim netA As Double = CDbl(tb_nettopA.Text), netB As Double = CDbl(tb_nettopB.Text)
    5. Dim count As Double = CDbl(nud_countp.Text)
    6. Dim mwstpA As Double = CDbl(cb_mwstpA.Text), mwstpB As Double = CDbl(cb_mwstpB.Text)
    7. 'ea stück
    8. Dim eatpA As Double = Math.Round(CDbl((netA * mwstpA) / 10), 2), eatpB As Double = Math.Round(CDbl((netB * mwstpB) / 10), 2)
    9. 'steuer und summe ohne ea
    10. tb_pA1.Text = Math.Round(CDbl(netA * count * (mwstpA - 1)), 2)
    11. tb_pA2.Text = Math.Round(CDbl(netA * count + tb_pA1.Text), 2)
    12. tb_pB1.Text = Math.Round(CDbl(netB * count * (mwstpB - 1)), 2)
    13. tb_pB2.Text = Math.Round(CDbl(netB * count + tb_pB1.Text), 2)
    14. 'befreit
    15. If cb_befreitp.Checked = True Then
    16. tb_eapA.Text = 0
    17. tb_eapB.Text = 0
    18. cb_asonep.Enabled = False
    19. cb_asonep.Checked = False
    20. ElseIf cb_befreitp.Checked = False Then
    21. cb_asonep.Enabled = True
    22. 'ea gesamt
    23. If eatpA < 10 And eatpA > 5 Then tb_eapA.Text = Math.Round(CDbl(eatpA * count), 2)
    24. If eatpA < 5 Then tb_eapA.Text = Math.Round(CDbl(5 * count), 2)
    25. If eatpA > 10 Then tb_eapA.Text = Math.Round(CDbl(10 * count), 2)
    26. If eatpB < 10 And eatpB > 5 Then tb_eapB.Text = Math.Round(CDbl(eatpB * count), 2)
    27. If eatpB < 5 Then tb_eapB.Text = Math.Round(CDbl(5 * count), 2)
    28. If eatpB > 10 Then tb_eapB.Text = Math.Round(CDbl(10 * count), 2)
    29. 'count as one
    30. If cb_asonep.Checked = True Then
    31. tb_eapA.Text = Math.Round(CDbl(tb_eapA.Text / 2))
    32. tb_eapB.Text = Math.Round(CDbl(tb_eapB.Text / 2))
    33. End If
    34. End If
    35. 'summe mit ea
    36. tb_sumpA.Text = Math.Round(CDbl(tb_pA2.Text - tb_eapA.Text), 2)
    37. tb_sumpB.Text = Math.Round(CDbl(tb_pB2.Text - tb_eapB.Text), 2)
    38. 'differenz
    39. If tb_sumpA.Text > tb_sumpB.Text Then tb_diffp.Text = Math.Round(CDbl(tb_sumpA.Text - tb_sumpB.Text), 2)
    40. If tb_sumpA.Text < tb_sumpB.Text Then tb_diffp.Text = Math.Round(CDbl(tb_sumpB.Text - tb_sumpA.Text), 2)
    41. Catch ex As Exception
    42. MessageBox.Show(ex.ToString)
    43. End Try
    44. End Sub



    Nun habe den Code in ähnlicher Ausführung auch ohne Fehlermeldung...

    VB.NET-Quellcode

    1. Dim net As Double = CDbl(tb_netto.Text), count As Double = CDbl(nud_count.Text)


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub b_calc_Click(sender As Object, e As EventArgs) Handles b_calc.Click
    2. Try
    3. 'deklaration
    4. Dim net As Double = CDbl(tb_netto.Text), count As Double = CDbl(nud_count.Text)
    5. Dim mwstA As Double = CDbl(0.07), mwstB As Double = CDbl(0.19)
    6. 'ea stück
    7. Dim eat7 As Double = Math.Round(CDbl((net * (mwstA + 1)) / 10), 2), eat19 As Double = Math.Round(CDbl((net * (mwstB + 1)) / 10), 2)
    8. 'steuer und summe ohne ea
    9. tb_7a.Text = Math.Round(CDbl(net * count * mwstA), 2)
    10. tb_7b.Text = Math.Round(CDbl(net * count + tb_7a.Text), 2)
    11. tb_19a.Text = Math.Round(CDbl(net * count * mwstB), 2)
    12. tb_19b.Text = Math.Round(CDbl(net * count + tb_19a.Text), 2)
    13. 'befreit
    14. If cb_befreit.Checked = True Then
    15. tb_ea7.Text = 0
    16. tb_ea19.Text = 0
    17. cb_asone.Enabled = False
    18. cb_asone.Checked = False
    19. ElseIf cb_befreit.Checked = False Then
    20. cb_asone.Enabled = True
    21. 'ea gesamt
    22. If eat7 < 10 And eat7 > 5 Then tb_ea7.Text = Math.Round(CDbl(eat7 * count), 2)
    23. If eat7 < 5 Then tb_ea7.Text = Math.Round(CDbl(5 * count), 2)
    24. If eat7 > 10 Then tb_ea7.Text = Math.Round(CDbl(10 * count), 2)
    25. If eat19 < 10 And eat19 > 5 Then tb_ea19.Text = Math.Round(CDbl(eat19 * count), 2)
    26. If eat19 < 5 Then tb_ea19.Text = Math.Round(CDbl(5 * count), 2)
    27. If eat19 > 10 Then tb_ea19.Text = Math.Round(CDbl(10 * count), 2)
    28. 'count as one
    29. If cb_asone.Checked = True Then
    30. tb_ea7.Text = Math.Round(CDbl(tb_ea7.Text / 2))
    31. tb_ea19.Text = Math.Round(CDbl(tb_ea19.Text / 2))
    32. End If
    33. End If
    34. 'summe mit ea
    35. tb_sum7.Text = Math.Round(CDbl(tb_7b.Text - tb_ea7.Text), 2)
    36. tb_sum19.Text = Math.Round(CDbl(tb_19b.Text - tb_ea19.Text), 2)
    37. 'differenz
    38. tb_diff.Text = Math.Round(CDbl(tb_sum19.Text - tb_sum7.Text), 2)
    39. Catch ex As Exception
    40. MessageBox.Show(ex.ToString)
    41. End Try
    42. End Sub


    Bilder
    • Bild 1.PNG

      17,89 kB, 480×343, 111 mal angesehen

    Sam85 schrieb:

    Nebenbei: Wäre es sinnvoller, generell eine andere Konvertierung der Zahlen anzuwenden?
    Du musst deine Eingaben sowieso vorher auf Korrektheit testen - schaue dir einmal Double.TryParse-Methode an...
    Oder verwende statt den TextBoxen --> NumericUpDown-Eingabecontrol, da brauchst du die Überprüfung deiner Eingaben nicht mehr machen...

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

    @Sam85 Prüfe zunächst, dass in den TextBoxen kein Unsinn (z.B. "Roullade mit Klößen") steht.
    Dann überlege, ob es ggf. sinnvoll ist, gleich ein NumericUpDown-Control zu verwenden.
    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!
    Hallo,

    ja das habe ich geprüft in beiden steht einfach zu beginn eine 0 drin und nach der Fehlermeldung, kann ich es auch normal nutzen. Gestern lief es lustigerweise :) ohne Fehlermeldung.
    Habe es jetzt auf NumericUpDown umgestellt :D läuft wieder Fehlerlos.

    Vielen Dank.
    Eine Frage habe ich noch, wenn ich das Steuerelement bei NumericUpDown verschwinden lassen will nutze ich den Code:

    VB.NET-Quellcode

    1. nud_netpA.Controls(0).Visible = False

    Nun wird das Feld einfach nur weiß gefärbt..kann man das anpassen bzw. das Steuerlement einfach verschwinden lassen ohne Rückstande, ohne viel Aufwand? :D
    Es soll nur das UpDown Control verschwinden, nicht das Ganze Feld :).
    hab es damit versucht...aber das funktioniert irgendwie nicht.

    VB.NET-Quellcode

    1. nud_netpA.VerticalScroll.Visible = False

    @Sam85 Aufgrund welchen Sachverhalts werden denn da ühaupt ScrollBars angezeigt?
    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!
    ich bin ja von der TextBox auf den NumericUpDown gewechselt...die Zahlen schreibe ich aber weiterhin mit der Hand und aus rein optischen Gründen, wollte ich das UpDown dann verschwinden lassen.

    Sam85 schrieb:

    das UpDown dann verschwinden lassen
    ist vom Framework nicht vorgesehen.
    Was Du allerdings machen könntest, wäre eine NumTextBox.
    Gugst Du hier.
    Gugst Du hier.
    Ich kann kein C# gilt nicht als Ausrede, gugst Du hier.
    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!