lunes, septiembre 17, 2007

Mi solucion alternativa al maskedTextBox de .NET 2005

La solucion alternativa corresponde al problema que tuve hace unos dias, para usar un maskedTextBox en .NET 2005, con el que queria hacer que con una mascara de solo numeros, validar sin mucho enfuerzo el contenido antes de enviarlo a mi base de datos, todo iba muy bien hasta que me di cuenta que este control, permite el ingreso de "espacios" entre los digitos de la mascara; si ud presiona la tecla de espacio, si ud utiliza las flechas, este control te deja un "hueco" sin llenar con algun caracter numerico. No hay problema si este es puesto al principio o al final de la secuencia, el problema llega cuendo digitas un espacio entre los numeros, asi por ejemplo, con una mascara "0000" la que supuestamente evita los espacios, al ser ejecutado el form se puede poner esta secuencia "12_3"; este nos daria un error si lo intentamos almacenar en una base de datos con un campo int, lo que al fin y al cabo nos lleva al principio, tenemos que realizar un codigo para validar la cadena inclusive usando el maskedTextBox, asi que como solucion propongo lo siguiente:
  • usar un textbox
  • crear un metodo que identifique un numero entero retornando un boolean
Ahora, en este textbox al que llamaré "codigo", usamos el evento keyPress para identificar en que momento se presiona, luego evaluamos el caracter para saber si es o no un numero, y luego, y dando que no, le asignamos a ese mismo caracter presionado un string vacio ("") para que de esta forma vuelva hacia atras como lo muestra el codigo:

Private Sub codigo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles codigo.KeyPress
If Not esEntero(e.KeyChar.ToString) Then
e.KeyChar = ""
End If
End Sub

De igual forma si se requiere limitar el numero de caracteres simplemente se contara el length y si es superado, se vuelve a asignar un string vacio.

Espero que haya sido util.

No hay comentarios.: