C# Textbox nur numerische Werte(ähnlich wie IsNumeric bei VB6)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    C# Textbox nur numerische Werte(ähnlich wie IsNumeric bei VB6)

    Hallo zusammen,

    ich bin gerade dabei mir C# anzueignen. Ich kann bis jetzt nur die Sprache Visual Basic 6.

    Zu meinem Problem... Ich bin gerade dabei einen Taschenrechner zu programmieren.
    Ich wollte nun programmieren, dass die Textbox nur numerische werte, Kommas und Rechenoperatoren annimmt.


    Bei VB6 funktioniert das ganze ja über IsNumeric und über Ascii... Habe dann mal bei google geschaut, ob es so etwas in der Art auch in C# gibt, aber leider habe ich nur Klassen und Funktionen gefunden, die für mich als Anfänger noch unverständlich sind :/

    Außerdem habe ich noch herausgefunden, dass man die MaskedTextBox verwenden soll. Aber da kann ich die Höhe der Textbox irgendwie nicht festlegen :/


    Kann mir einer von euch vielleicht sagen, wie ich in der Textbox nur Numerische Werte und halt kommas und Rechenoperatoren zulasse ??
    Du benötigst das KeyPress Event und trägst dort z.B.

    C#-Quellcode

    1. if (!"1234567890".Contains(e.KeyChar) & !(e.KeyChar == Convert.ToChar(8)))
    2. {
    3. e.Handled = true;
    4. }


    ein.

    Bedeutet: Wenn die Eingabe nicht eine Ziffer oder nicht Backspace ist, dann wird eine eigene Behandlung vorgenommen. Alles andere wird unbehandelt gelassen. Es gibt allerdings keine eigene Behandlung, so dass die nicht erwünschten Zeichen einfach ignoriert werden. Du müsstest jetzt nur noch ergänzen.

    Im übrigen ist das bei vb.net auch nicht anders.
    @ Dennis336
    Im KeyDown-Event der TextBox kannst Du das aktuelle Zeichen testen und im Negativfall das KeyPress-Event unterdrücken.
    Allerdings solltest Du auch im TextChanged-Event den Inhalt überprüfen, denn C&P geht da lang, nicht aber über KeyDown:

    C#-Quellcode

    1. private void Form1_KeyDown(System.Object sender, System.Windows.Forms.KeyEventArgs e)
    2. {
    3. if (e.KeyCode == Keys.A) // hier die ganze Liste
    4. {
    5. e.SuppressKeyPress = true;
    6. }
    7. }

    oder halt die inverse Codierung mit switch.
    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!