Eingabe führt zu einem Absturz

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Eingabe führt zu einem Absturz

    Hallo,

    wenn ich in der 2 ten TextBox (unten) eine Zahl eingebe und dann in der 1 ten TextBox eingebe (oben) kommt das Ergebniss in der 3 ten TextBox (rechts)...

    wenn ich jedoch den Rechenwert als erstes in TextBox 1 eingebe und dann in TextBox 2 stürzt das Programm ab ??? Wieso ???



    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    3. Dim X As Double = TextBox1.Text
    4. Dim Y As Double = TextBox2.Text
    5. TextBox3.Text = (TextBox1.Text - TextBox2.Text)
    6. End Sub
    7. End Class

    VB1963 schrieb:

    Du rechnest mit TextBoxen, d.h. du versuchst mit Strings zu rechnen!
    1) Stelle OPTION STRICTauf ON
    2) Konvertiere deine Stringeingaben auf gültige Zahlen X, Y (Double)
    3) Verwende dann deine X, Y zum rechnen


    sorry wenn ich nochmal frage ... ich bin halt Anfänger :D


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    3. Dim X As String = TextBox1.Text
    4. Dim Y As String = TextBox2.Text
    5. Dim Ergebniss As Integer
    6. Convert.ToDouble(Ergebniss)
    7. TextBox3.Text = Ergebniss
    8. End Sub
    9. End Class

    Janiiix3 schrieb:

    VB.NET-Quellcode

    1. Dim X As Double = TextBox1.Text
    2. Dim Y As Double = TextBox2.Text
    3. TextBox3.Text = (TextBox1.Text - TextBox2.Text)
    So:

    VB.NET-Quellcode

    1. Dim X As Double = Convert.ToDouble(TextBox1.Text)
    2. Dim Y As Double = Convert.ToDouble(TextBox2.Text)
    3. TextBox3.Text = (x - y).ToString
    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!
    Verwende TryParse um deine Textboxeingaben auf die Doublevariablen zuzuweisen:

    VB.NET-Quellcode

    1. Dim X As Double
    2. If TryParse(Textbox1.Text, X) then
    3. 'Eingabe ist Ok
    4. Else
    5. 'fehlerhafte Eingabe
    6. 'oder ein gültiger Ersatzwert
    7. EndIf

    ...erst wenn alle Eingaben gültig sind, rechnen...
    oder besser noch, du verwendest andere Controls, wo nur Werteingaben zulässig sind...

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

    Janiiix3 schrieb:

    liegt das vill. am Kompiler ?
    Steht in der TextBox vielleicht Roulade mit Klößen statt 17 :?:
    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!

    RodFromGermany schrieb:

    Steht in der TextBox vielleicht Roulade mit Klößen statt 17 :?:


    Schon wieder ein "Ein Satz den ich jede Woche sage" Satz! :D
    Solltest mal ne Library dafür machen! ;)
    @TE
    Wie schon erwähnt dann nimm die Methode "TryParse".
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Janiiix3 schrieb:

    wenn ich jedoch den Rechenwert als erstes in TextBox 1 eingebe und dann in TextBox 2 stürzt das Programm ab ??? Wieso ???


    Weil du die Berechnung machst, wenn sich in der TextBox 1 etwas geändert hat (Changed-Event). Da fragst du Textbox 2 ab, in der nichts steht. Da du es nicht abfängst, sondern sofort eine Zahl daraus machen willst, stürzt das Programm ab, weil es einen leeren String nicht in eine Zahl umwandeln kann.

    Wie schon gesagt wurde:
    1. Option Strict On
    2. TryParse benutzen. Die Funktion versucht String in Zahl zu konvertieren, wenn es nicht klappt, stürzt nichts ab, sonder es kommt nur ein False zurück (das musst du natürlich abfragen).
    3. Die Berechnung in einem Button-Klickevent durchführen (mache dir ein Button "Rechnen" hin, wenn der geklickt wird, führst du die Berechnungen durch, sollte eine TextBox leer sein, hast du es mit TryParse abgefangen und kannst eine Fehlermeldung über MessageBox.Show("Bitte geben Sie erst alle Zahlen ein") ausgeben).