How to: Create a Numeric Text Box

You can create a custom control derived from TextBox so that it accepts only numeric input. This example defines the NumericTextBox class and shows how to place it on the form.


For an example of this control that strictly constrains user input, see How to: Control User Input in a Numeric Text Box.

The code in this example verifies the current character whenever a key is pressed. Another way to implement a numeric text box is to use pattern matching to verify the entire input string. For more information, see IsMatch.

To derive a class from TextBox

  • Add the NumericTextBox class to your project.

    Public Class NumericTextBox
        Inherits TextBox
        Private SpaceOK As Boolean = False 
        ' Restricts the entry of characters to digits (including hex), 
        ' the negative sign, the e decimal point, and editing keystrokes (backspace). 
        Protected Overrides Sub OnKeyPress(ByVal e As KeyPressEventArgs)
            Dim numberFormatInfo As NumberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat
            Dim decimalSeparator As String = numberFormatInfo.NumberDecimalSeparator
            Dim groupSeparator As String = numberFormatInfo.NumberGroupSeparator
            Dim negativeSign As String = numberFormatInfo.NegativeSign
            If groupSeparator = CChar(160).ToString() Then
                .groupSeparator = " " 
            End If 
            Dim keyInput As String = e.KeyChar.ToString()
            If [Char].IsDigit(e.KeyChar) Then 
                ' Digits are OK 
            ElseIf keyInput.Equals(decimalSeparator) OrElse keyInput.Equals(groupSeparator) OrElse keyInput.Equals(negativeSign) Then 
                ' Decimal separator is OK 
            ElseIf e.KeyChar = vbBack Then 
                ' Backspace key is OK 
                '    else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0) 
                '    { 
                '     // Let the edit control handle control and alt key combinations 
                '    } 
            ElseIf Me.SpaceOK AndAlso e.KeyChar = " "c Then 
                ' Consume this invalid key and beep.
                e.Handled = True 
            End If 
        End Sub 
        Public ReadOnly Property IntValue() As Integer 
                Return Int32.Parse(Me.Text)
            End Get 
        End Property 
        Public ReadOnly Property DecimalValue() As Decimal 
                Return [Decimal].Parse(Me.Text)
            End Get 
        End Property 
        Public Property AllowSpace() As Boolean 
                Return Me.SpaceOK
            End Get 
            Set(ByVal value As Boolean)
                Me.SpaceOK = value
            End Set 
        End Property 
    End Class
    public class NumericTextBox : TextBox
        bool allowSpace = false;
        // Restricts the entry of characters to digits (including hex), the negative sign, 
        // the decimal point, and editing keystrokes (backspace). 
        protected override void OnKeyPress(KeyPressEventArgs e)
            NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
            string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
            string groupSeparator = numberFormatInfo.NumberGroupSeparator;
            string negativeSign = numberFormatInfo.NegativeSign;
            // Workaround for groupSeparator equal to non-breaking space 
            if (groupSeparator == ((char)160).ToString())
                groupSeparator = " ";
            string keyInput = e.KeyChar.ToString();
            if (Char.IsDigit(e.KeyChar))
                // Digits are OK
            else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
                // Decimal separator is OK
            else if (e.KeyChar == '\b')
                // Backspace key is OK
            //    else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0) 
            //    { 
            //     // Let the edit control handle control and alt key combinations 
            //    } 
            else if (this.allowSpace && e.KeyChar == ' ')
                // Consume this invalid key and beep
                e.Handled = true;
                //    MessageBeep();
        public int IntValue
                return Int32.Parse(this.Text);
        public decimal DecimalValue
                return Decimal.Parse(this.Text);
        public bool AllowSpace
                this.allowSpace = value;
                return this.allowSpace;

To add the NumericTextBox control to the form

  1. Add the following code to the form's constructor or Load event.

    ' Create an instance of NumericTextBox. 
    Dim NumericTextBox1 As NumericTextBox = New NumericTextBox()
    NumericTextBox1.Parent = Me 
    ' Draw the bounds of the NumericTextBox.
    NumericTextBox1.Bounds = New Rectangle(5, 5, 150, 100)
    // Create an instance of NumericTextBox.
    NumericTextBox numericTextBox1 = new NumericTextBox();
    numericTextBox1.Parent = this;
    //Draw the bounds of the NumericTextBox.
    numericTextBox1.Bounds = new Rectangle(5, 5, 150, 100);
  2. Add an InputPanel component to your form for user input into the NumericTextBox. For a Smartphone application, you can specify a numeric InputMode.

Compiling the Code

This example requires references to the following namespaces:

See Also


How to: Set Smartphone Input Modes

How to: Use the InputPanel Component


Custom Control Development

.NET Compact Framework How-to Topics

Change History




May 2009

Added information about regular expressions.

Customer feedback.