▶ Como Validar solo Números en los Textbox C# - Windows Forms

Cuando trabajas en aplicaciones C# y te encuentras con la necesidad de asegurar que un TextBox solo acepte números, la validación adecuada se convierte en un aspecto clave para garantizar la integridad de los datos. En este artículo, exploraremos estrategias efectivas para lograr esta validación específica y proporcionaremos códigos prácticos que puedes implementar en tus proyectos de desarrollo en C#.

TEXTBOX SOLO NÚMEROS

1. Implementación de Validación en Tiempo Real:

La primera estrategia para validar solo números en un TextBox es aprovechar eventos en tiempo real. Puedes suscribirte al evento KeyPress y verificar si la tecla presionada es un número. Aquí tienes un ejemplo de cómo implementarlo:

Como hacer que un Textbox Solo acepte Números en C#

El siguiente código ejemplo valida que se digite solo números en un Textbox en C#, para esto se agrega al evento KeyPress de la caja de texto:
private void txtCaracter_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
{
      MessageBox.Show("Solo se permiten numeros", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
      e.Handled = true;
      return;
}
} 

Este código asegura que solo se ingresen números y controla que las teclas de control (como borrar o retroceso) puedan usarse.

2. Uso de Expresiones Regulares:

Otra técnica poderosa es emplear expresiones regulares para validar el contenido del TextBox. La clase Regex de C# facilita la implementación de esta validación. A continuación, se presenta un ejemplo de cómo hacerlo:

private void TextBox_TextChanged(object sender, EventArgs e)
{
    string input = TextBox.Text;
    if (!Regex.IsMatch(input, "^[0-9]+$"))
    {
        MessageBox.Show("Por favor, ingrese solo números.", "Error de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error);
        TextBox.Text = ""; 
    }
}

Este código verifica si el contenido del TextBox contiene únicamente en números. En caso contrario, muestra un mensaje de error y lo limpia el. 

3. Utilización de Métodos TryParse: 

Una tercera opción es utilizar los métodos int.TryParse o double.TryParse para intentar convertir el texto a un número. Si la conversión tiene éxito, se permite el ingreso; de lo contrario, se rechaza. 

private void TextBox_Leave(object sender, EventArgs e)
{
    if (!int.TryParse(TextBox.Text, out _))
    {
        MessageBox.Show("Por favor, ingrese solo números.", "Error de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error);
        TextBox.Text = ""; // Limpiar el contenido no válido
    }
}

Leer Más:

Valida Solo Números en C#

Al digitar una tecla diferente a un número, se envía un mensaje (se podría comentar la linea del mensaje para que no se muestre) como lo muestra la siguiente imagen:


Digitación correcta:


Garantizar la entrada de datos precisa es esencial en cualquier aplicación, y validar solo números en TextBox en C# es un paso crucial. Al implementar estas estrategias, no solo mejora la integridad de los datos sino que también proporciona a los usuarios una experiencia más intuitiva y libre de errores.

Asegúrate de integrar estas prácticas en tu código para lograr una aplicación robusta y confiable. ¡Explora estas opciones y lleva tu desarrollo en C# al siguiente nivel!

Si quieren conocer esta validación, pero controlando que solo digiten letras, pueden visitar el articulo Solo letras en los Textbox C# - Windows Forms.

Share:

21 comentarios:

  1. Hola, me parece una buena opción para controlar lo que entra por un TextBox, pero al leer el post me ha venido a la cabeza el NumericUpDown que nos permite ingresar un número, incluso incrementarlo o decrementarlo a golpe de click, además de poder controlar su rango mediante sus propiedades. Personalmente prefiero este último, pero claro el TexBox permite una mayor amplitud de entrada pero a mayor riesgo de que esa entrada no sea valida y la debas controlar.
    Para gustos, colores.

    ResponderEliminar
  2. Buen aporte Aarón, totalmente de acuerdo.

    ResponderEliminar
  3. Gracias!, me sirvió.

    ResponderEliminar
  4. amigo ami no me funciono ayudaa.!!

    ResponderEliminar
  5. Hola Hector, tu código lo estas realizando en visual studio C# ? para proyectos Windows Forms en el evento KeyPress de una caja de texto, me cuentas.

    ResponderEliminar
  6. Solo quiero validar los ceros y ubos este codigo sirve para eso?????

    ResponderEliminar
  7. Hola anónimo, necesitas que no se permita escribir ceros (0)?

    ResponderEliminar
  8. Buenos días,

    Alvaro gracias por tu comentarios, hasta pronto.

    ResponderEliminar
  9. Muchas Gracias Por Tu Ayuda :3

    ResponderEliminar
  10. Muchas gracias por este post, la verdad me haz salvado la vida :3

    gracias de nuevo amigo :D

    ResponderEliminar
  11. Hola, muchas gracias, me ha servido. PEro lo que paasa es que ahora ya no me deja pegar!! :D Cómo se podria resolver eso?. he copiado unos numeros pero quiero pegar en el textbox pero no me deja. Alguna idea¿?

    ResponderEliminar
  12. Hola Juan carlos, te envío una Url que te puede servir mucho. http://stackoverflow.com/questions/25135505/detecting-ctrlv-on-key-press

    Pienso que debes cambiar del evento KeyPress al evento KeyDown todas las validaciones de Solo números junto y agregarle la que permita solo Pegar.

    Si tienes dudas me cuentas.

    Saludos.

    ResponderEliminar
  13. Muchas gracias me sirvió bastante, adjunto el mismo código con una variación para que acepte el punto, por si la cantidad a recibir no es un número estero, saludos

    if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && !(e.KeyChar == ('.')))
    {
    MessageBox.Show("Solo se permiten numeros", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    e.Handled = true;
    return;
    }

    Atte. Gerson S.

    ResponderEliminar
  14. Gracias Gerson por tu aporte.!!!

    ResponderEliminar
  15. hola amigos, aquí les traigo el mismo código pero modificado para que acepte presionar "Enter" o "Intro"


    Explico para que entiendan un poco mejor

    // Evento KeyPress de un TextBox
    private void txtTlf_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (!(char.IsNumber(e.KeyChar)) && // Si No Es Numero
    (e.KeyChar != (char)Keys.Back) && // y Si No es Backspace(Borrar)
    (e.KeyChar != (char)Keys.Enter) && // y si no es Enter(Entrar)
    (e.KeyChar != (char)Keys.Return) && // y si no es Return(Entrar o Intro del Teclado Numerico)
    (e.KeyChar != (char)Keys.Delete)) // y si no es Delete(Del o Suprimir, Supr)
    { // Entonces
    // Lanzamos Mensaje diciendo que solo permite numeros
    MessageBox.Show("Solo se permiten numeros en el Campo Telefono", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    // Habilitamos el Handled = true para que no escriba nada si no son las teclas validadas
    e.Handled = true;
    //Retornamos
    return;
    } // entonces si las teclas son las permitidas Validamos
    else if (e.KeyChar == (char)Keys.Enter) // si se presiona Enter
    {
    SendKeys.Send("{TAB}"); // mandamos un Tab para ir al siguiene campo
    }
    else if (e.KeyChar == (char)Keys.Return) // si se presiona Return (Intro del Teclado Numerico)
    {
    SendKeys.Send("{TAB}"); // mandamos un Tab para ir al siguiene campo
    }

    }

    Espero les Funcione..
    Gracias..
    #dedosenelcodigo

    ResponderEliminar
  16. Gracias Jorge, muy buen código. saludos

    ResponderEliminar
  17. Excelente me sirvio de mucho

    ResponderEliminar
  18. como hacer un condicional para que el usuario no coloque el cero al inicio de la cadena

    ResponderEliminar