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.
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) MyBase.OnKeyPress(e) 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 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 Else ' Swallow this invalid key and beep e.Handled = True End If End Sub Public ReadOnly Property IntValue() As Integer Get Return Int32.Parse(Me.Text) End Get End Property Public ReadOnly Property DecimalValue() As Decimal Get Return [Decimal].Parse(Me.Text) End Get End Property Public Property AllowSpace() As Boolean Get 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) { base.OnKeyPress(e); NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; string decimalSeparator = numberFormatInfo.NumberDecimalSeparator; string groupSeparator = numberFormatInfo.NumberGroupSeparator; string negativeSign = numberFormatInfo.NegativeSign; string keyInput = e.KeyChar.ToString(); if (Char.IsDigit(e.KeyChar)) { // Digits are OK } else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) || keyInput.Equals(negativeSign)) { // 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 == ' ') { } else { // Swallow this invalid key and beep e.Handled = true; // MessageBeep(); } } public int IntValue { get { return Int32.Parse(this.Text); } } public decimal DecimalValue { get { return Decimal.Parse(this.Text); } } public bool AllowSpace { set { this.allowSpace = value; } get { return this.allowSpace; } } }
To add the NumericTextBox control to the form
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);
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
Tasks
How to: Set Smartphone Input Modes
How to: Use the InputPanel Component
Concepts
Custom Control Development
.NET Compact Framework How-To Topics