Nur Zahlen in einer TextBox erlauben

    • Allgemein

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

      Nur Zahlen in einer TextBox erlauben

      Wie kann ich nur Zahlen in einer TextBox erlauben?

      Im KeyPress-Event kann man das gedrückte Zeichen abfragen und ggf verbieten indem es auf 0 gesetzt wird.

      VB.NET-Quellcode

      1. Private Sub TextBox1_KeyPress(KeyAscii As Integer)
      2. Select Case KeyAscii
      3. Case asc("0") To asc("9"), 8, 32, asc(",")
      4. 'Zeichen zulassen
      5. Case Else
      6. KeyAscii = 0 'alles andere verweigern
      7. End Select
      8. End Sub


      API-Variante von Pascal:

      VB.NET-Quellcode

      1. Option Explicit
      2. Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
      3. ByVal hwnd As Long, _
      4. ByVal nIndex As Long) As Long
      5. Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
      6. ByVal hwnd As Long, _
      7. ByVal nIndex As Long, _
      8. ByVal dwNewLong As Long) As Long
      9. Private Const ES_NUMBER As Long = &H2000&
      10. Private Const GWL_STYLE As Long = -16
      11. Private Sub Form_Load()
      12. Dim lngRetSWL As Long
      13. lngRetSWL = SetWindowLong(Form1.Text1.hwnd, GWL_STYLE, _
      14. GetWindowLong(Form1.Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
      15. If lngRetSWL = 0 Then
      16. MsgBox "Error"
      17. Else
      18. MsgBox "Success"
      19. End If
      20. End Sub


      in VB.net:

      VB.NET-Quellcode

      1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
      2. Select Case Asc(e.KeyChar)
      3. Case 48 To 57, 8, 32
      4. ' Zahlen, Backspace und Space zulassen
      5. Case Else
      6. ' alle anderen Eingaben unterdrücken
      7. e.Handled = True
      8. End Select
      9. End Sub



      Keywords: Visual Basic 6, VB 6, VB.net, VB 2005, Textbox, Eingabe, Nur Zahlen, Asc, Key Press, Key Down, KeyAscii, KeyChar
      Gruß, Agent Smith 8-)

      activeFlags = (lazy OR weary)

      Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Agent“ ()

      Hey, auch wenn das Theme hier alt ist, aber ich habe trotzdem eine Frage:

      Was bringen diese Zahlen in diesem Code?

      VB.NET-Quellcode

      1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
      2. Select Case Asc(e.KeyChar)
      3. Case 48 To 57, 8, 32
      4. ' Zahlen, Backspace und Space zulassen
      5. Case Else
      6. ' alle anderen Eingaben unterdrücken
      7. e.Handled = True
      8. End Select
      9. End Sub


      Und warum ausgerechnet diese Zahlen und keine anderen? Das verstehe ich nicht ganz. Na ja, wenigstens funktioniert der Code.
      So noch eine Frage:

      Der Punkt hat ja in der ASCII-Tabelle die Zahl "46". Wenn ich aber diese jetzt in diesen Code einfüge, also so:

      VB.NET-Quellcode

      1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
      2. Select Case Asc(e.KeyChar)
      3. Case 48 To 57, 8, 32, 46
      4. ' Zahlen, Backspace und Space zulassen
      5. Case Else
      6. ' alle anderen Eingaben unterdrücken
      7. e.Handled = True
      8. End Select
      9. End Sub


      Dann wird der Punkt immer noch unterdrückt. Aber warum? Könnt ihr mir helfen?

      EDIT: Hat sich erledigt.

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

      1. Ich würde das KeyDown-Event benutzen
      2. Setze einfach einen Haltepunkt rein und sieh Dir dann den KeyCode an, den Du unterdrücken willst.
      Dieser Punkt heißt Keys.OemPeriod. Allerdings solltest Du Keys.Decimal verwenden, das ist dann Punkt oder Komma in Abhängigkeit der Systemeinstellung.

      VB.NET-Quellcode

      1. Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
      2. Select Case e.KeyCode
      3. Case Keys.D0 To Keys.D9, Keys.Back, Keys.Space, Keys.Decimal ', Keys.OemPeriod
      4. ' Zahlen, Backspace und Space zulassen
      5. Case Else
      6. ' alle anderen Eingaben unterdrücken
      7. e.SuppressKeyPress = True
      8. End Select
      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!
      Huhu,
      Sorry das ich das Thema hochhole aber es passt gerade.
      Mit dem KeyDown Event funktioniert es fast perfekt. Das Problem ist nur, das Sonderzeichen die über den erlaubten Zahlen liegen auch eingegeben werden können. Was kann man dagegen machen?

      Grüße
      Frag die Modifiers ab:

      VB.NET-Quellcode

      1. Private Sub Form1_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
      2. If e.Modifiers = Keys.Shift Then
      3. ' etwas tun oder unterbinden
      4. End If
      5. 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!