jueves, 17 de enero de 2008

Como comprobar ciertos caracteres al escribir en una textbox

Una de las formas más sencillas que existen para evitar que nuestro programa produzca errores por una entrada de datos errónea consiste en controlar que caracteres escribe el usuario, dejándole que sólo aparezcan aquellos que nos interesan.

Dicho de otro modo; imaginemos que tenemos una textbox donde pedimos un número de teléfono. Para evitar un error, lo más sencillo consiste en hacer que la textbox sólo permita escribir números. Además de evitar errores, obtenemos una aparecia mas profesional para nuestro programa y conseguimos que los datos estén mas depurados.

¿Y como hacemos esto en Visual Basic .Net? Pues muy sencillo. Nos vamos al evento keypress de la textbox y miramos el carácter ascii que ha pulsado el usuario, modificando la salida de datos si no es correcto. Es decir, si el usuario escribe un carácter que no es válido, lo que hacemos es capturar el evento y enviar un carácter vacío. Veamos el código (en el ejemplo sólo se dejamos escribir en la textbox letras de la a -> z, A -> Z y del 0 al 9).

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

Dim strLetra As String
Dim blFlag As Boolean = False

strLetra = UCase(e.KeyChar)

'Miramos si está en el rango permitido
Select Case Asc(strLetra)
Case 97 To 122 : blFlag = True 'Es letra de la a -> z
Case 65 To 90 : blFlag = True 'Es letra de la A -> Z
Case 48 To 57 : blFlag = True 'Es un número 0 -> 9
Case Else : blFlag = False
End Select

If blFlag = False Then
'Indicamos que la tecla la manejamos nosotros
e.Handled = True
'El caracter no es valido -> enviamos un carácter vacío
SendKeys.Send("")
End If

End Sub
Como veis, la idea es muy sencilla. Miramos que tecla ha pulsado el usuario, comprobamos si es correcta y en caso de que no lo sea, capturamos el evento de la tecla (el handled=true) y enviamos un carácter vacío. Si lo probais, vereis que el efecto es realmente bueno.

Hasta aquí estupendo.... pero.... ¿y si el usuario se equivoca y pulsa la tecla de retroceso? Claro, la tecla de retroceso no está contemplada dentro de las teclas válidas, a si que con una sencilla modificación le diremos a Visual Basic .Net que esta tecla también es correcta:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

Dim strLetra As String
Dim blFlag As Boolean = False

strLetra = UCase(e.KeyChar)

'Miramos si está en el rango permitido
Select Case Asc(strLetra)
Case 97 To 122 : blFlag = True 'Es letra de la a -> z
Case 65 To 90 : blFlag = True 'Es letra de la A -> Z
Case 48 To 57 : blFlag = True 'Es un número 0 -> 9
Case 8 : blFlag = True 'Tecla de retroceso
Case Else : blFlag = False
End Select

If blFlag = False Then
'Indicamos que la tecla la manejamos nosotros
e.Handled = True
'El caracter no es valido -> enviamos un carácter vacío
SendKeys.Send("")
End If

End Sub
Espero que os haya sido útil. Como os comentaba al comienzo del post, esta es una de las mejores maneras de comprobar que los datos introducidos son correctos. Normalmente lo suelo utilizar en números de teléfono, fax, dni, códigos de barra y así me evito tener que realizar multitud de if llenos de comprobaciones para ver si el formato es correcto. Happy coding amigos!!!

2 comentarios:

Anónimo dijo...

Espero que los colegas sepan apreciar los consejos.
En esto de la informatica hay mucho que hablar y que descubrir.
SUERTE

Anónimo dijo...

El codigo es bueno, pero no pude evitar recordar el clásico interés que tomamos para escapar de los "usuarios tontos", pero que más allá de eso, siempre estaremos lejos de conseguirlo porque hay otras variables que pueden ser burladas, y de nada vale habernos preocupado hasta el paroxismo, por ejemplo:

http://www.microsiervos.com/archivo/ordenadores/paroxismo-validador.html

Un saludo
http://pepedosmil.blogia.com