TextBox, Numerico y Double

agosto 18, 2009

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.