Wie lasse ich in VB.NET 2003 in einer TextBox nur Ziffern und das Grad-Zeichen zu?

Antwort vom

**Am einfachsten blockierst du im `KeyPress`-Ereignis alle Zeichen außer `0–9`, `°` und sinnvollen Steuertasten wie Backspace.** So verhinderst du die falsche Eingabe direkt beim Tippen statt erst hinterher. ```vbnet Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If Char.IsDigit(e.KeyChar) _ OrElse e.KeyChar = ChrW(176) _ OrElse e.KeyChar = ControlChars.Back Then e.Handled = False Else e.Handled = True End If End Sub ``` ## Was dabei wichtig ist `ChrW(176)` ist das Grad-Zeichen `°`. `ControlChars.Back` erlaubt Backspace, damit der Nutzer löschen kann. Ohne diese Ausnahme wäre die TextBox praktisch unbenutzbar. ## Typischer Denkfehler Nur `KeyPress` zu prüfen reicht **nicht vollständig**, wenn Text auch per Einfügen aus der Zwischenablage in die TextBox kommt. Dann können trotzdem unerlaubte Zeichen hineingelangen. Wenn es wirklich sauber sein soll, prüfst du zusätzlich nach jeder Änderung den gesamten Inhalt und entfernst alles Unerlaubte wieder: ```vbnet Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Dim i As Integer Dim neu As String = "" For i = 1 To Len(TextBox1.Text) Dim ch As String = Mid(TextBox1.Text, i, 1) If IsNumeric(ch) OrElse ch = ChrW(176) Then neu &= ch End If Next If TextBox1.Text <> neu Then Dim pos As Integer = TextBox1.SelectionStart TextBox1.Text = neu If pos > Len(TextBox1.Text) Then pos = Len(TextBox1.Text) TextBox1.SelectionStart = pos End If End Sub ``` ## Besser als `IsNumeric` Für einzelne Zeichen ist `Char.IsDigit` im `KeyPress`-Event klarer und präziser als `IsNumeric`, weil du wirklich nur Ziffern erlaubst und nicht versehentlich andere numerisch interpretierbare Eingaben. Wenn du zusätzlich nur **ein einziges** Grad-Zeichen erlauben willst, muss man die Prüfung noch etwas enger machen.

Kategorie: Technik Tags: VBNet TextBox Gradzeichen