Curso Básico de Programación
en Visual Basic

 

Soluciones de la entrega cuarenta y seis: 12/Abr/2003

 

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
Guillermo


 
entrega anterior ir al índice siguiente entrega

Ir al índice principal del Guille