Truco: Solo Numeros en los Textboxt (Windows Forms) – VB y CSharp


Hay ocaciones que en nuestras aplicaciones debemos controlar lo que el USUARIO deberia escribir en los TextBox… recuerden que esas personitas son experto para hacer que nuestras aplicaciones den un error y mas en los campos que solo debe ir NUMERO en ves de texto muy util en los ID o Codigos utilizados en las tablasde nuestras Base de Datos… por ello aqui les dejo este pequeño truquillo.

Por cierto para que funcione deben codificar el evento KeyPress del TextBox.

En Visual Basic:

   1: Private Sub txtPruebaNumero_KeyPress(ByVal sender As Object, _
   2:                            ByVal e As System.Windows.Forms.KeyPressEventArgs) _
   3:                            Handles txtPruebaNumero.KeyPress
   4:
   5:  If Char.IsDigit(e.KeyChar) Then
   6:       e.Handled = False
   7:   ElseIf Char.IsControl(e.KeyChar) Then
   8:       e.Handled = False
   9:   ElseIf Char.IsSeparator(e.KeyChar) Then
  10:       e.Handled = False
  11:   Else
  12:       e.Handled = True
  13:   End If
  14: End Sub
  15:

En Visual C#:

   1: private void TxtPruebaNumero_KeyPress(object sender, KeyPressEventArgs e)
   2: {
   3:     if (Char.IsDigit(e.KeyChar))
   4:     {
   5:         e.Handled = false;
   6:     }
   7:     else if (Char.IsControl(e.KeyChar))
   8:     {
   9:         e.Handled = false;
  10:     }
  11:     else if (Char.IsSeparator(e.KeyChar))
  12:     {
  13:         e.Handled = false;
  14:     }
  15:     else
  16:     {
  17:         e.Handled = true;
  18:     }
  19: }

La diferencia entre este codigo para solo numero con el de solo texto (que tambien esta publicado aqui) es que solo cambia en el comando de IsLetter por IsDigit

31 comentarios sobre “Truco: Solo Numeros en los Textboxt (Windows Forms) – VB y CSharp

  1. hola quisiera saber cual es el codigo que voy a poner en el MainForm.Designer.cs ya que depues de poner
    private void TxtPruebaNumero_KeyPress(object sender, KeyPressEventArgs e)
    en el mainform.cs me tira un error en el MainForm.Designer.cs..

  2. Hola amigo, muchisimas gracias por aportar tu codigo xDD! a sido de mucha ayuda para programar mi proyecto!! Dios te siga bendiciendo xDD! y de nuevo mil gracias 😀
    yo estoy trabajando en Microsoft Visual Studio 2005

  3. Modificando un poquillo el código de esta entrada, es así como sólo permito ingresar números y letras (va dentro del evento KeyPress del textBox):

    if (!Char.IsDigit(e.KeyChar) && !Char.IsLetter(e.KeyChar))
    {
    e.KeyChar = (char)0;
    e.Handled = false;
    }

  4. MUCHAS GRACIAS AMIGOS POR GRANDÍSIMOS APORTES, 😀

    de la programación que dio el amigo » eltiopegas » podemos eliminar la fila del centro quedando de la siguiente manera: (así me funcionó muy bien, recuerden que es C# y es en un textbox en el evento Keypress)

    private void textBox5_KeyPress(object sender, KeyPressEventArgs e)
    {
    String Aceptados = «0123456789.,» +Convert.ToChar(8);

    if (Aceptados.Contains(«»+e.KeyChar))
    {
    e.Handled=false;
    }
    else
    {
    e.Handled = true;
    }
    }

    Es para que el textbox solo admita números, la coma y el punto, nada de letras.

  5. Holas tambien podrían probar utilizando este código en el evento keypress del control, con esto solo te permite ingresar digitos y permite la tecla backspace.

    e.Handled = !(char.IsDigit(e.KeyChar) || ((int)(e.KeyChar) == 8))

  6. mmm quisiera saber si se puede hacer en modo consola
    Ejm:
    int num
    Console.WriteLine(«ingrese numero menor que 5»);
    num = int.Parse(Console.ReadLine()); error
    while (esc5)// oviamente que si escribo una letra sale
    {
    Console.WriteLine(«Reeingrese Numero»);
    esc = int.Parse(Console.ReadLine());
    }

  7. Para los que esten interesados en textbox números decimales en C# este código
    hay que ponerlo en el evento KeyPress:

    String Aceptados = «0123456789.,»+Convert.ToChar(8);
    if (e.KeyChar == ‘.’) e.KeyChar = ‘,’;
    if(Aceptados.Contains(«»+e.KeyChar))e.Handled=false;else e.Handled = true;

  8. Saludos,

    Excelente codigo, he estado tratando :3 de hacer alguna funcion parecida y habia fallado, he encontrado varias formas por google de como controlar que solo entren un tipo de dato pero este ha sido el mejor!! muy bueno!!

  9. nesesito saber como funciona esta sentencia de codigo,
    osea si me funciona, pero no se como funciona,
    me gustaria ke me dijeran, linea por linea
    gracias
    y esta muy bueno el codigo

  10. Dim numeros() As Char = {«1», «2», «3», «4», «5», «6», «7», «8», «9», «0»}

    Private Sub txtCuadro_KeyPress(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.KeyPressEventArgs) _
    Handles txtCuadro.KeyPress

    If Array.IndexOf(numeros, e.KeyChar) >= 0 Then
    e.Handled = False
    Else
    e.Handled = True
    End If

    Pues a mi me sirvio este código, porque al añadirle un par de elementos al arreglo se puede habilitar un par de teclas mas, como el ‘-‘ o ‘+’, o ‘.’

    Saludos y felicidades.

  11. Hola amigos, no se por que la gente quiere inventar el agua tibia, existe un control denominado MastedTextBox, al cual se le puede asignar varios comportamientos. Pruebenlo y se daran cuenta

Deja un comentario