Como: Criar uma caixa de texto numérica
Você pode criar um controle personalizado derivado de TextBox para que ele aceite somente entrada numérica. Este exemplo define o NumericTextBox classe e mostra como colocá-lo no formulário.
Para derivar uma classe de TextBox
Adicionar o NumericTextBox classe para seu projeto.
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 ' Consume 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 { // Consume 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; } } }
Para adicionar o controle NumericTextBox ao formulário
Adicione o seguinte código ao construtor do formulário ou Load evento.
' 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);
Adicionar um InputPanel componente ao seu formulário para entrada do usuário para o NumericTextBox. Para um aplicativo Smartphone, você pode especificar um numérico InputMode.
Compilando o código
Este exemplo requer referências aos seguintes namespaces:
Consulte também
Tarefas
Como: Conjunto Smartphone Input Modes
Como: Usar o InputPanel componente