vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB4, VB5, VB617.09.03
TextBox für Betragseingaben

Dieser Tipp zeigt, welche Schritte notwendig sind, um eine TextBox korrekt als Betragseingabe-Box verwenden zu können.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  16.272 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wird eine TextBox für eine Betragseingabe benötigt, sollte man darauf achten dass:

  1. nur Zahlen, Punkt (Komma) und ggf. das Minuszeichen eingegeben werden können
  2. ein Punkt (Komma) als Dezimalzeichen nur einmal eingegeben werden darf
  3. ein Minuszeichen nur als erstes Zeichen eingegeben werden darf

Die Abfrage der zulässigen Zeichen selbst erfolgt im KeyPress-Ereignis der TextBox:

Private Sub Text1_KeyPress(KeyAscii As Integer)
  With Text1
    Select Case KeyAscii
      Case 48 To 57, 46, 8, 13
        ' Zahlen, Punkt, Backspace und ENTER
 
      Case 44
        ' Aus Komma mach Punkt
        KeyAscii = 46
 
      Case 45
        ' Minuszeichen nur als erstes Zeichen zulassen
        If .SelStart > 0 Then KeyAscii = 0
 
      Case Else
        ' alle anderen Zeichen nicht erlaubt!
        KeyAscii = 0
    End Select
 
    ' Punkt darf nur 1 x eingegeben werden!
    If (KeyAscii = 46) And InStr(.Text, Chr$(KeyAscii)) > 0 Then
      KeyAscii = 0
    End If
  End With
End Sub

Und damit man obigen Code nicht immer und immer wieder in das KeyPress-Ereignis einfügen muss, erstellen wir einfach eine universelle Funktion mit zusätzlichen optionalen Parametern:

' Zulässige Zeichen für Betragseingaben
Public Sub CheckNumericInput( _
  oText As TextBox, _
  KeyAscii As Integer, _
  Optional ByVal bAllowNegativeValues As Boolean = True, _
  Optional ByVal sDecimalChar As String = ",")
 
  Dim nDecimal As Integer
 
  If sDecimalChar <> "" Then nDecimal = Asc(sDecimalChar)
 
  With oText
    Select Case KeyAscii
      Case 48 To 57, nDecimal, 8, 13
        ' Zahlen, Dezimalzeichen, Backspace und ENTER
 
      Case 44, 46
        ' Aus Komma mach Punkt bzw. umgekehrt
        KeyAscii = nDecimal
 
      Case 45
        ' Minuszeichen nur als erstes Zeichen zulassen
        If .SelStart > 0 Or Not bAllowNegativeValues Then KeyAscii = 0
 
      Case Else
        ' alle anderen Zeichen nicht erlaubt!
        KeyAscii = 0
    End Select
 
    ' Dezimalzeichen darf nur 1 x eingegeben werden!
    If (KeyAscii = nDecimal And nDecimal > 0) Then
      If InStr(.Text, Chr$(nDecimal)) > 0 Then KeyAscii = 0
    End If
  End With
End Sub

Beispiele für den Aufruf:

Private Sub Text1_KeyPress(KeyAscii As Integer)
  ' Negativ-Werte erlaubt
  ' Komma als Dezimaltrennzeichen verwenden
  CheckNumericInput Text1, KeyAscii
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
  ' Negativ-Werte erlaubt
  ' Punkt als Dezimaltrennzeichen verwenden
  CheckNumericInput Text1, KeyAscii, , "."
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
  ' Negativ-Werte erlaubt
  ' keine Nachkommastellen!
  CheckNumericInput Text1, KeyAscii, , ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
  ' nur positive Werte erlaubt
  ' Komma als Dezimaltrennzeichen verwenden
  CheckNumericInput Text1, KeyAscii, False
End Sub