Textbox lässt kein Komma zu

  • VB.NET

Es gibt 47 Antworten in diesem Thema. Der letzte Beitrag () ist von ThePlexian.

    Textbox lässt kein Komma zu

    Hallo ich habe hier ein Programm was verschiedene Werte berechnen soll, es klappt soweit auch , nur lassen die textboxen für die Eingabe der Werte kein Komma zu und ich bekomme das Problem nicht gelöst.

    Hier ein Ausschnitt des Quellcodes:

    VB.NET-Quellcode

    1. Option Explicit On
    2. Public Class Form1
    3. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    4. Select Case e.KeyChar
    5. Case ChrW(48) To ChrW(57)
    6. Case Else
    7. e.KeyChar = ChrW(0)
    8. End Select
    9. End Sub
    10. Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    11. TextBox3.Text = Val(TextBox1.Text) ^ 2 * Val(TextBox2.Text) * 0.5
    12. End Sub
    13. Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
    14. Select Case e.KeyChar
    15. Case ChrW(48) To ChrW(57)
    16. Case Else
    17. e.KeyChar = ChrW(0)
    18. End Select
    19. End Sub
    20. Private Sub TextBox2_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyUp
    21. TextBox3.Text = Val(TextBox1.Text) ^ 2 * Val(TextBox2.Text) * 0.5
    22. End Sub


    Wäre über Hilfe sehr dankbar.
    Moin,

    schalte mal Option Strict On. Du speicherst hier Integer in Strings usw.
    ​Val sollte übrigens mit besseren, .NET-konformen Konvertierungsmethoden ersetzt werden.

    Grüße
    #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 :!:
    Du blockierst ja auch alles im KeyPress-Event außer den Zahlen 0-9.
    Du solltest übrigens den Microsoft.VisualBasic-Namespace aus den Verweisen rausnehmen, damit Val(), ChrW() wegfällt und dir ordentliche Alternativen suchen.

    Außerdem hast kannst du aus den vier Methoden zwei machen, indem du mehrfache Handler nutzt
    -> Private Sub TB_KeyPress(...) Handles TB1.KeyPress, TB2.KeyPress
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Willkommen im Forum.

    Pascal88 schrieb:

    lassen die textboxen für die Eingabe der Werte kein Komma zu
    Wie äußert sich das?
    Probier mal diesen Code aus.
    Form, TextBox, Label:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    2. Label1.Text = e.KeyCode.ToString
    3. End Sub
    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!

    Pascal88 schrieb:

    Mir ist bewusst das der Code nicht sonderlich elegant ist , allerdings erfüllt ja ja soweit seinen Zweck.

    Das ist die falsche Denkweise. So ist der Code sehr leicht fehleranfällig und fliegt Dir um die Ohren. Außerdem muss ein Programm immer gut laufen.

    Grüße
    #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 :!:
    @Pascal88

    RodFromGermany schrieb:

    Probier mal diesen Code aus.
    Hast Du das bereits getan?
    Was hast Du gelernt?
    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 wollte es keineswegs so ausdrücken das ich kein Interesse habe es zu verstehen und zu verbessern.

    @RodFromGermany

    Habe das eben total überlesen , entschuldige bitte.

    Welchen Teil sollte ich dadurch ersetzen?

    Label ist in dem Fall ja nicht möglich da ich nur Textboxen benutze , auch für die Ergebnisse.

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

    Pascal88 schrieb:

    Welchen Teil sollte ich dadurch ersetzen?
    Verstehe es und schreib dann einfach die Lösung auf, wenn Du es verstanden hast.
    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!


    Also so anpassen`?

    VB.NET-Quellcode

    1. Option Explicit On
    2. Public Class Form1
    3. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    4. Select Case e.KeyChar
    5. Case ChrW(48) To ChrW(57)
    6. Case Else
    7. e.KeyChar = ChrW(44)
    8. End Select
    9. End Sub
    10. Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    11. TextBox3.Text = Val(TextBox1.Text) ^ 2 * Val(TextBox2.Text) * 0.5
    12. End Sub
    13. Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
    14. Select Case e.KeyChar
    15. Case ChrW(48) To ChrW(57)
    16. Case Else
    17. e.KeyChar = ChrW(44)
    18. End Select
    19. End Sub
    @Pascal88 Bist Du beratungsresistent oder nimmst Du nur süße Medizin :?:
    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!
    @Rod: Der TE hat derzeit das _KeyPress-Event am Wickel, was soller nu das _KeyDown abonnieren, und dessen KeyCode im Label angucken?
    Er wirds garnet schaffen, weil er den Unterschied nicht bemerkt, und wie gesagt: Es nützt ihm ja auch nix, KeyCodes anzugucken.

    @TE: probierma so:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    2. Select Case e.KeyChar
    3. Case "0"c To "9"c, ","c
    4. Case Else
    5. e.Handled = True
    6. End Select
    7. End Sub

    So, und dann fang nochmal mit dem in post#2 und post#3 gesagten an, nämlich

    Option Strict On!
    und
    Böse Funktionen vermeiden

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

    Ich möchte nicht Beratungsresistent wirken aber ich habe nur eine Begrenzte Zeit um das Problem zu lösen und es ist dadurch äusserst knapp sich so umfangreiches Wissen anzueignen , wobei ich versuchen möchte alle Ratschläge zu berücksichtigen.

    @ ErfinderDesRades

    das hat mir jetzt schon sehr weitergeholfen , aber irgendwie stimmen die Rechnungen jetzt nicht mehr.

    Kannst du da bitte nochmal drüberschauen

    VB.NET-Quellcode

    1. Private Sub TextBox20_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox20.KeyPress
    2. Select Case e.KeyChar
    3. Case "0"c To "9"c, ","c
    4. Case Else
    5. e.Handled = True
    6. End Select
    7. End Sub
    8. Private Sub TextBox20_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox20.KeyUp
    9. TextBox22.Text = Val(TextBox20.Text) / Val(TextBox21.Text)
    10. End Sub
    11. Private Sub TextBox21_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox21.KeyPress
    12. Select Case e.KeyChar
    13. Case "0"c To "9"c, ","c
    14. Case Else
    15. e.Handled = True
    16. End Select
    17. End Sub
    18. Private Sub TextBox21_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox21.KeyUp
    19. TextBox22.Text = Val(TextBox20.Text) / Val(TextBox21.Text)
    20. End Sub


    Ich habe jetzt mal versucht den Code auch für die dritte Textbox zu benutzen aber er will das Komma beim Ergebnis nicht angeben , das ist soweit mein letztes Problem.

    Danach werde ich mich noch an die Ratschläge aus Posting 2 und 3 halten und versuchen es umzusetzen.

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

    Pascal88 schrieb:

    Leider
    hab ich noch die böse Funktion Val in meinem Code und immer noch nicht Option Strict On.

    VB.NET-Quellcode

    1. Private Sub TextBox20_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox20.KeyUp
    2. Dim v1 = Double.Parse(TextBox1.Text)
    3. Dim v2 = Double.Parse(TextBox2.Text)
    4. If v2 <> 0 Then
    5. TextBox3.Text = (v1 / v2).ToString
    6. Else
    7. TextBox3.Text = "Division durch 0"
    8. End If
    9. End Sub
    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!

    Pascal88 schrieb:

    immer zum folgenden Fehler
    in welcher Codezeile?
    Welcher String ganz genau steht in den Textboxen?
    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!