TextBox, Numerico y Double

Muchas veces tenemos la nesesidad de crear aplicaciones en las que en alguna caja de texto el dato que nesesitemos sea numerico o decimal y ya sea por X o Y motivo a nosotros no nos interesa que el usuario pueda capturar otro dato que no sea ( 0 – 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – . ). Por lo que en este ejemplo haremos exactamente eso.

Que nesesito saber antes de empezar:

Utilizaremos el metodo IsDigit de la estructura char. (mas informacion y por que ese metodo en el link, en la parte de Funcionalidad)

http://msdn.microsoft.com/es-es/library/system.char(VS.80).aspx

El textbox cuenta con muchos eventos pero los eventos que utiliza para reconocer la entrada de datos por medio del teclado son:

  • PreviewKeyDown
  • KeyDown
  • KeyPress
  • KeyUp

El evento que utilizaremos sera el KeyPress, ya que es en este donde se nos presenta la propiedad Handle que  es por medio de la cual lograremos el objetivo.

El código queda de la siguiente manera:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
             //El metodo IsDigit nos regresa un valor true si la tecla presionada es  un digito decimal.   
            if (!char.IsDigit(e.KeyChar))
           {       
                      e.Handled = true;
           }
}

Con esto el textbox solo aceptara numeros de 0-9 cuando presionen una tecla y nada mas.  Ahora vamos por el que acepte un solo punto.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
           //Lo que vamos a hacer es validar que si el textbox ya contiene un punto valide ahora que solo se teclen numeros, si no lo contiene todavia, entonces debe validar si se presiono un numero o el punto , de eso se encarga nuestro else.
                 if (textBox1.Text.Contains(‘.’))
                 {
                          if(!char.IsDigit(e.KeyChar))
                          {
                                   e.Handled = true;
                          }
                  }
                  else
                  {
                            if(!char.IsDigit(e.KeyChar))
                            {
                                     e.Handled = true;
                             }

                             if(e.KeyChar==‘.’)
                             {
                                       e.Handled = false;
                             }
                 }
}

Ahora estoy seguro que ya habran notado que solo funciona el teclado numerico y el punto dentro de nuestro textbox, no podemos borrar con el backspace. Para poder utilizarlo solo debemos hacer lo siguiente.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
           if (textBox1.Text.Contains(‘.’))
           {
                      if(!char.IsDigit(e.KeyChar))
                      {
                               e.Handled = true;
                       }

                       if (e.KeyChar == ‘\b’)
                       {
                                e.Handled = false;
                        }
           }
           else
           {
                          if(!char.IsDigit(e.KeyChar))
                          {
                                  e.Handled = true;
                           }

                           if(e.KeyChar==‘.’ || e.KeyChar==‘\b’)
                          {
                                   e.Handled = false;
                          }
            }
}

Tip de despedida: no hay nesesidad de ir por ahi escribiendo el codigo en todos los KeyPress que nesesiten es suficiente con crear un metodo y referenciar los eventos al respectivo metodo y ya esta. Se los digo por que hasta hace poco yo ponia el código en todos los KeyPress, mas adelante aprendi a manipular los eventos y sus parametros, por lo que me ahorre mucho tiempo al escribir código.

private void MiMetodofuncionTeclitas(object sender, KeyPressEventArgs e){
         //Ponen aqui en codigo y ya Esta.
}

Cuando referencien al metodo solo le mandan los parametros del evento KeyPress y ya esta.

Dudas, Quejas, Sugerencias, Comentarios y Guias de WordPress con toda confianza ya saben.

Anuncios

15 Responses to TextBox, Numerico y Double

  1. rogelioamaya dice:

    o perdon olvide mencionar que en el siguiente ejemplo usare este mismo codigo pero en el maligno DGV.

  2. Raptor dice:

    Creo que si lo mencionaste

  3. Angel dice:

    esta bueno el truquito

  4. lalomon dice:

    una consulta, cuando haces e.KeyChar == ‘\b’ el e.keychar es un char y me dice que ‘\b’ es un string y me arroja error como puedo solucionarlo

    • rogelioamaya dice:

      Hola, am pues la verdad asi como me lo estas escribiendo (‘\b’) es correcto, te propongo lo siguiente, pega la linea de codigo que te arroja el error en un comentario y checa la sintaxis, para mas detalles te dejo el codigo del ejemplo que use.
      http://www.megaupload.com/?d=FUBHYY3W

      pero porfavor si lo solucionas o no te agradeceria que me lo hicieras saber.

  5. Chelo dice:

    Este método es super útil sin embargo suguiero una mejora

    en vez e utilizar

    if (textBox1.Text.Contains(‘.’))

    recomiendo reemplazar esa linea por

    if (((Textbox)sender).Text.Contains(‘.’))

    Es mas el ‘.’ lo reemplazaria por

    System.Windows.Forms.Application.CurrentCulture.NumberFormat.NumberDecimalSeparator el que entrega el caracter decimal q se ocupa segun tu region.

    quedando asi

    char wDecimal = char.Parse(System.Windows.Forms.Application.CurrentCulture.NumberFormat.NumberDecimalSeparator);

    if (((Textbox)sender).Text.Contains(wDecimal))

    Saludos

  6. Hola Muy Buena Ayuda, lo necesitaba y esto lo soluciona muy bien
    una sola modificación con las ” ” para string y ‘ ‘ para char
    pero todo Bien

    muy buen Blogs 😀

  7. Carlos Caicedo dice:

    Bueno he visto tu código y se ve genial, pero hay una cosita, dices que si se debe realizar varios keyPress es mejro escribir uno generico y refrenciarlo? Como?
    Tengo varios textboxes (17) para ser exacto y en ellos debo hacer exactamente lo mismo, cómo le hago para no tener escribir copiar el mismo codigo??

    Mil gracias!!!!

    • Rogelio dice:

      Disculpa yo ya tengo habandonado este blog, lo que el amigo quiere hacer basta con escribir una funcion aparte y mandarla llamar, hay otras formas pero ^^ tengo abandonado el blog solo deje eso por que era muy visitado y como sea le ayudaba a alguien.

  8. Miguel Casimiro dice:

    Mi comentario? Si C# no es capaz de que en un textbox uno le pueda determinar de una manera facil,simple,sencilla no joda el formato de entrada que uno quiera sin tener que escribir una longaniza de codigo es una mierdaaaaaaaaaaaa una gran mierdaaaaa es involucionar como programador porque no es verdad q un programador debe estarse preocupando por simplezas asi y taladrarse la cabeza con una cosa que es el pan y mantequilla de cualquier desarrollador.

    Mucho menos a estas alturas del juego estar viendo que caracter me digitaron para saber si es un numero o no se que mierda esa vaina era en los 60 estamos en el 2012.

    Debiera escribirse codigo para cosas importantes no para cosas simples para todo tiene que ser una escribidera de codigo? Donde esta lo amigable, la escalabilidad, lo sencillo del lenguaje , donde?

    Pero yo soy un creyente y me inclino a pensar que estamos discutiendo esto por ignorancia porque no sabemos como hacerlo pero si no es asi y es como explico mas arriba entonces lo reitero.

    C# ? ES UNA GRAN MIERDA Y NO SOLO C# CUALQUIER LENGUAJE QUE NO TENGA SIMPLEZAS COMO ESTAS SOLUCIONADAS LO ES

  9. jemp8 dice:

    como envio los parametros del evento keypress al metodo

  10. ta chevere garsias por la ayuda me sirviop de mucho
    espero que sigan poniendo este tipo de cosas

  11. Can I just say what a relief to search out someone who actually knows what theyre speaking
    about on the internet. You undoubtedly know the right way to convey a difficulty
    to light and make it important. Extra individuals have to read this and perceive this side of the
    story. I cant believe youre no more widespread since
    you positively have the gift.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: