|
Curso básico
de programación en Visual Basic
Lección
46
Solución,
keypress y mtext
|
Realizamos
programas para la gestión de empresas. Empresas medianas y
pequeñas. Programas de contabilidad, cartera de pedidos
clientes proveedores, facturación control de albaranes,
tesorería cartera de cobros y pagos y estadísticas.
Nuestro
agradecimiento a todos los que por unas causas o por otras
visitan nuestra web. Gestión de empresas PYMES. Curso de
programación de Visual Basic.
|
Aquí tienes la solución al
ejercicio propuesto en la entrega 46.
Realmente lo único que había que
añadir era el código necesario a la pulsación de teclas en la
clase, para ello tenías que modificar el evento KeyPress del
objeto mText que es el que se encarga de manipular el TextBox
asociado con esta clase.
Lo que hacemos (al
menos lo que yo creo que habría que hacer) es:
Comprobar el tipo asignado en la propiedad Tipo, de forma que
si es del tipo Enteros se compruebe si se han pulsado las
teclas: BackSpace (borrar hacia atrás), los signos más (+), menos
(-) y cualquiera de los dígitos de cero a nueve.
En el caso de que el valor de la
propiedad Tipo sea Decimales se comprueba además si
se ha pulsado la coma, el punto y cualquiera de las letras E o D
(tanto en mayúsculas como en minúsculas), de esta forma,
aceptaremos cualquier tipo de valor decimal.
Tanto si el valor de la propiedad
Tipo es Enteros o Decimales, se utiliza un segundo Select Case para
comprobar si es una de las teclas aceptadas o no, en caso negativo,
asignamos un valor cero al parámetro recibido (KeyAscii) para que
no tenga en cuenta la tecla pulsada, y si es una de las teclas
aceptadas, simplemente no hacemos nada, con lo cual permitimos que
se acepte la pulsación de esa tecla.
Y siempre se obliga a que se
produzca el evento KeyPress de esta clase, para ello utilizamos la
última línea:
RaiseEvent KeyPress(KeyAscii),
ya que este será el evento que la clase que hayamos declarado en el
formulario recibirá, por tanto en muy importante no olvidar de
añadir esta producción del evento al final del procedimiento.
En ese evento ya estará filtrada la tecla pulsada, de forma que si
la tecla no es válida, no se recibirá... bueno, si se recibe, pero
al ser un valor cero, no se tiene en cuenta.
Por último, si el valor asignado a
la propiedad Tipo no es ninguno de los dos que hemos
comentado, admitirá cualquier tecla y esa tecla será la que se
envíe al evento del objeto creado en el formulario desde el que se
utilice nuestra clase.
El código completo es el
siguiente:
Private Sub mText_KeyPress(KeyAscii As Integer)
Select Case m_Tipo
Case eTipo.Enteros
Select Case KeyAscii
Case 8, 43, 45, 48 To 57
' Sólo admitir teclas consideradas numéricas
' El 8 es la tecla Backspace (borrar hacia atrás)
' Los códigos 43 y 45 son los signos + y - respectivamente
Case Else
' No es una tecla numérica, no admitirla
KeyAscii = 0
Beep
End Select
Case eTipo.Decimales
Select Case KeyAscii
Case 8, 43 To 46, 48 To 57, 68, 69, 100, 101
' Sólo admitir teclas consideradas numéricas
' El código 44 es la coma y el 46 es el punto
' La E y D son para números con notación científica
' (68 y 100 es la E y e, 69 y 101 es D y d)
' El 8 es la tecla Backspace (borrar hacia atrás)
' Los códigos 43 y 45 son los signos + y - respectivamente
Case Else
' No es una tecla numérica, no admitirla
KeyAscii = 0
Beep
End Select
End Select
RaiseEvent KeyPress(KeyAscii)
End Sub
Espero que esto sea lo que más o
menos hayas hecho, aunque no es necesario que sea exactamente como
aquí te lo he mostrado, ya que existen otras formas de hacer lo
mismo, lo importante es que se hayan hecho estas comprobaciones, me
refiero a aceptar las teclas mencionadas, para que se acepten los
datos que hemos definido, es decir: números, tanto decimales como
enteros.
Otra cosa es aceptar valores de
fecha, en ese caso habría que aceptar, además de las cifras, los
separadores de las fechas y también podríamos hacer que al pulsar
Intro en el textbox se comprobara si la fecha es correcta y esas
cosas... pero eso lo dejo a tu gusto... si revisas entregas
anteriores, verás que teníamos código para comprobar fechas... si
no recuerdo mal.
De todas formas, es posible que en otra ocasión te de mi solución
para que tengas un punto de referencia de cómo hacerlo, pero eso no
será ahora... ¡ya veremos cuando!
Nos vemos

|