VB.Net - Limitar la entrada de un TextBox sólo a números

Mayo 2017




En este artículo veremos dos ejemplos para limitar la entrada de un TextBox sólo a números, teniendo en cuenta el separador decimal del PC huésped.

Ejemplo 1


La manera más simple para limitar la entrada en un textbox la veremos a continuación:
  • Abre un nuevo proyecto Windows Forms
  • En el formulario agrega:
    • Un textbox
    • Una etiqueta
    • Un botón


Luego pega este condigo:
Public Class Form1
  Dim Sep As Char
  Dim Número As Double

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Número = CDbl(TextBox1.Text)
    Etiqueta1.Text = Número
  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Detectar el separador decimal de la aplicación.
    Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
    TextBox1.Focus()
  End Sub

  Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
  End Sub
End Class

Ejemplo 2


Sin embargo, la solución 1 no es la más comoda para el usuario.
Efectivamente, el separador decimal está condicionado a la configuración del PC huésped, esto podría ocasionar, por ejemplo, tener que teclear la coma del teclado alfanumérico si la aplicación no ha cambiado el punto del teclado decimal a coma (si es necesario una coma).
La ventaja de esta segunda solución es que el usuario puede teclear a su elección, un punto o una coma, el código lo corrige en función del PC.
  • Agrega un segundo formulario con los mismos componentes
  • Pega este código:

Public Class Form2
  Dim Sep As Char
  Dim Nombre As Double

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Applique()
  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Detectar el separador decimal de la aplicación.
    Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
  End Sub

  Private Sub Data_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Data.KeyDown
    If e.KeyCode = 13 Then
      Aplica()
    End If
  End Sub

  Private Sub Data_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Data.TextChanged
    If Data.Text = Sep Then
      'si el separador decimal es tecleado directamente
      Data.Text = "0" & Sep
      Data.SelectionStart = Len(Data.Text)
    ElseIf Not IsNumeric(Trim(Data.Text)) Then
      Beep()
      If Len(Data.Text) < 1 Then
        Data.Text = ""
      Else
        Data.Text = Microsoft.VisualBasic.Left(Data.Text, Len(Data.Text) - 1)
        Data.SelectionStart = Len(Data.Text)
      End If
    End If
  End Sub
  Sub Aplica()
    Dim DT As String
    'Para adaptar a la configuracion del PC huesped.
    DT = Replace(Data.Text, ".", Sep)
    DT = Replace(DT, ",", Sep)
    Label1.Text = CDbl(DT)
    On Error Resume Next
    Data.SelectionStart = 0
    Data.SelectionLength = Len(Data.Text)
    Data.Focus()
  End Sub
End Class

Consulta también

Artículo original escrito por . Traducido por Carlos-vialfa. Última actualización: 12 de septiembre de 2010 a las 18:31 por Carlos-vialfa.
El documento «VB.Net - Limitar la entrada de un TextBox sólo a números» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.