Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB2005, VB2008 | 15.10.09 |
TextBox für verschiedene Eingabeformate Eine erweiterte TextBox, bei der man zusätzlich festlegen kann, welche Eingaben zulässig sind. | ||
Autor: Dieter Otter | Bewertung: | Views: 12.514 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Heute stellen wir Ihnen eine Klasse vor, die von der Standard TextBox erbt und diese um eine neue Eigenschaft InputFormat erweitert. Über diese Eigenschaft lässt sich festlegen, welche Eingaben zulässig sind:
- Nur Zahlen
- Nur Buchstaben
- Zahlen und Buchstaben
- Zahlen, Buchstaben und Sonderzeichen
- alle Zeichen
Weiterhin implementieren wir ein Ereignis, das immer dann ausgelöst werden soll, wenn der Anwender ein ungültiges Zeichen in die TextBox eingeben will. Über diese Ereignis könnte man bspw. den Anwender darüber informieren, welche Zeichen zulässig sind.
Fügen Sie Ihrem Projekt ein neues Klassenmodul mit nachfolgendem Code hinzu:
Public Class TextBoxEx Inherits TextBox Private m_Format As txtFormat = txtFormat.AllText ' Definiert die erlaubten Zeichen Private Const charsNumeric As String = "0123456789" Private Const charsAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß " Private Const charsSpecial As String = ":.;,!&%/()=*+-_<>" ' Auflistungskonstanten für die Eingabebeschränkungen Public Enum txtFormat AllText = 0 Numeric = 1 OnlyText = 2 NumericAndText = 3 NumerTextSpecialChars = 4 End Enum
''' <summary> ''' Wird beim Drücken eines ungültigen Zeichens ausgelöst. ''' </summary> Public Event InvalidChar(ByVal sender As Object, ByVal KeyChar As Char)
''' <summary> ''' Legt das Format der zulässigen Eingaben fest oder gibt dieses zurück. ''' </summary> Public Property InputFormat() As txtFormat Get Return m_Format End Get Set(ByVal value As txtFormat) m_Format = value End Set End Property
''' <summary> ''' Gibt die erlaubten Zeichen als Gesamtstring zurück. ''' </summary> Public ReadOnly Property AllowedChars() As String Get Select Case m_Format Case txtFormat.Numeric Return charsNumeric Case txtFormat.OnlyText Return charsAlpha Case txtFormat.NumericAndText Return charsNumeric & charsAlpha Case txtFormat.NumerTextSpecialChars Return charsNumeric & charsAlpha & charsSpecial Case Else Return "" End Select End Get End Property
Private Sub TextBoxEx_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress ' Tastatur-Eingabe prüfen Select Case Asc(e.KeyChar) Case 8, 13 ' Backspace und Return immer zulassen Case Else ' je nach InpitFormat-Eigenschaft prüfen, ' ob die gedrückte Taste zulässig ist Select Case m_Format Case txtFormat.Numeric ' nur Zahlen e.Handled = Not charsNumeric.Contains(e.KeyChar.ToString) Case txtFormat.OnlyText ' nur Buchstaben e.Handled = Not charsAlpha.Contains(e.KeyChar.ToString.ToUpper) Case txtFormat.NumericAndText ' Zahlen und Buchstaben e.Handled = (Not charsNumeric.Contains(e.KeyChar.ToString) AndAlso _ Not charsAlpha.Contains(e.KeyChar.ToString.ToUpper)) Case txtFormat.NumerTextSpecialChars ' Zahlen, Buchstaben und Sonderzeichen e.Handled = (Not charsNumeric.Contains(e.KeyChar.ToString) AndAlso _ Not charsAlpha.Contains(e.KeyChar.ToString.ToUpper) AndAlso _ Not charsSpecial.Contains(e.KeyChar.ToString)) End Select If e.Handled = True Then ' Event auslösen RaiseEvent InvalidChar(sender, e.KeyChar) End If End Select End Sub
End Class
Anwendungsbeispiel:
Ziehen Sie die neue TextBox auf die Form und setzen InputFormat auf den Wert Numeric. Platzieren Sie weiterhin ein Label-Control auf die Form und benennen es lblStatus.
Wenn der Anwender ein ungültiges Zeichen eingibt, soll ihm dies im Label-Control entsprechend angezeigt werden.
Private Sub TextBoxEx1_InvalidChar(ByVal sender As Object, _ ByVal KeyChar As Char) Handles TextBoxEx1.InvalidChar lblStatus.Text = "Ungültiges Zeichen: " & KeyChar & vbCrLf & _ "Erlaubte Zeichen sind: " & sender.AllowedChars End Sub
Private Sub TextBoxEx1_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles TextBoxEx1.TextChanged lblStatus.Text = "" End Sub