Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Se puede crear un control personalizado derivado de TextBox para que acepte sólo entradas numéricas. En este ejemplo se define la clase NumericTextBox y se muestra la forma de colocarla en el formulario.
Para derivar una clase de TextBox
Agregue la clase NumericTextBox al proyecto.
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 Classpublic 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 agregar el control NumericTextBox al formulario
Agregue el código siguiente al evento Load o al constructor del formulario.
' 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);Agregue un componente InputPanel al formulario para los datos proporcionados por el usuario en NumericTextBox. En una aplicación de Smartphone, se puede especificar un InputMode numérico.
Compilar el código
Para este ejemplo se requieren referencias a los siguientes espacios de nombres:
Vea también
Tareas
Cómo: Establecer los modos de entrada de Smartphone
Cómo: Utilizar el componente InputPanel