Pasa Programación, apuntes y soluciones con Access
Página principal Mis apuntes de Access Mis utilidades Mis ejemplos Mis agradecimientos Enlaces a otras Webs

Un control numérico

Ejemplo en Access 2000, en el que se simula un cuadro para la introducción de números, con 2 flechas a la derecha para aumentar o disminuir el número.


Ejemplo del control en Windows

En algunos programas de Windows aparecen cajas para introducir números enteros, con la opción de tener 2 flechas a la derecha de la caja para aumentar o disminuir el número. Por ejemplo, en la configuración regional tenemos uno de esos controles para seleccionar el año límite cuando se introduce únicamente las 2 últimas cifras, tal y como se ve en la imagen.

Este tipo de control no es estándar, pero con un poquito de ingeniería lo podemos imitar. No te asustes con lo de "ingeniería", es sólo una expresión ;-).

Primero necesitamos los controles que van a servir para dar ese aspecto a un cuadro de texto normal, y que van a ser los siguientes:

  • El cuadro de texto, por supuesto.
  • 2 botones de comando, para reducir y aumentar el número.
  • 2 controles de imagen, para mostrar las flechitas.

Tras colocar el cuadro de texto en el formulario, pasamos a colocar los 2 controles de imagen, le indicamos a Access qué imágenes queremos usar, y nos peleamos un poco con las dimensiones y posiciones para que queden a la derecha del cuadro de texto, y que parezca que están acopladas al control. Ahora colocamos los 2 botones de comando justo encima de las imágenes, cada uno con las dimensiones y posición idénticas a la de la imagen que tapa. No te preocupes si la imagen no se ve en la vista diseño, cuando se abra el formulario en vista normal, la veremos ;-)



Ahora vamos con la modificación de las propiedades. Para el cuadro de texto, lo primero es, si va a ser dependiente, escoger un campo de la tabla o consulta que almacene un número. Y como este tipo de controles se muestran normalmente con números enteros, en el ejemplo he escogido un campo con un tipo de datos de este estilo: Número entero. También debemos establecer la regla de validación de ese cuadro de texto, si es que no tenemos una regla definida para el campo. Así nos evitamos que con las flechas el usuario no pueda pasar de cierto número, pero tecleándolo sí que lo pueda exceder. En mi ejemplo, la regla es "Entre -100 y 100". Podemos modificar el formato, la máscara, etc., pero eso os lo dejo a vuestro gusto, ya que estas propiedades no van a interferir mucho con el aspecto que queremos dar.

Para los controles de imagen tampoco necesitamos modificar ninguna propiedad, ya que su misión es meramente decorativa; son los botones de comando quienes manejan todo el "cotarro". Lo único a tener en cuenta, es darles un nombre descriptivo, para saber luego qué hacen (que si no, luego ya no nos acordamos de qué son ni para qué sirven).

Y vamos a por estos botones de comando. Primero, los nombres. En el ejemplo, como van a modificar el campo cantidad, les he dado los nombres cmdUpCant y cmdDownCant ¡original que es uno! Pero ahora vamos a por las propiedades que realmente nos van a crear la apariencia que queremos:

  • Transparente: a esta propiedad le damos el valor Sí, para que el botón sea transparente. No se verá en el formulario, pero sí funcionará.
  • Repetición automática: le damos el valor Sí, para que el evento Al hacer click se reproduzca mientras el/la usuari@ mantenga pulsado el botón del ratón sobre el botón de comando.
  • Punto de tabulación: le damos el valor No para que el botón de comando no reciba el enfoque cuando se use la tecla TAB. Al ser transparente, realmente no tiene que ser muy necesario, pero así nos evitamos comportamientos extraños.
  • Al hacer click: aquí vamos a indicar que queremos usar un [Procedimiento de evento] para este evento. Es decir, usaremos un poco de código VBA para cuando se genere el evento por la actuación de el/la usuari@.

Por si acaso no te has dado cuenta, a estas propiedades se les asignan los mismos valores para los 2 botones de comando.

Y ahora sólo nos queda establecer el código para los eventos Al hacer click de los 2 botones de comando. Vamos a empezar por el botón que aumenta el número:

Private Sub cmdUpCant_Click()
    If Nz(Me.cantMov, -100) < 100 Then
        Me.cantMov = Nz(Me.cantMov, 0) + 1
        DoEvents
    End If
End Sub

Te recuerdo que mi botón de comando para aumentar se llama cmdUpCant, y que el cuadro de texto donde aparece el número, se llama cantMov. Dicho esto, seguimos. Lo primero que se hace es comprobar que el número sea menor que el máximo número que queremos que el usuario introduzca (en este caso, el máximo número es 100). Si el número es menor, incrementamos en uno su valor y usamos la función DoEvents para que se ejecuten todas las instrucciones que tenga pendiente Windows. De esta forma, nos aseguramos de que, si se mantiene pulsado el botón del ratón sobre la flecha, en el cuadro de texto veremos correr los números.

Y para el evento del botón que va a reducir la cantidad, el código es muy similar:

Private Sub cmdDownCant_Click()
    If Nz(Me.cantMov, 100) > -100 Then
        Me.cantMov = Nz(Me.cantMov, 0) - 1
        DoEvents
    End If
End Sub

Lo que cambia es que en vez de comprobar el número mayor, comprobamos el número menor (-100). Y si te fijas, estos límites son los mismos que los establecidos para la regla de validación del cuadro de texto. Al tener los mismos límites, nos evitamos posibles anomalías.

Por último, ver que en los 2 códigos, al aumentar o disminuir el valor, si este no existe, usamos el cero como defecto, para no empezar desde el principio o desde el final, sino de una posición intermedia o, mejor dicho, más lógica; si no hay nada, es que está a cero ;->

Otras cosillas que tiene el ejemplo son las siguientes:

  • Filtrar un subformulario con un cuadro combinado en el formulario principal.
  • Usar controles transparentes en los formularios.

Revisiones

Fecha

Versión

Descripción

01/03/2008

1.0

Creación del ejemplo para Access 2000.

Descargas

Descarga el ejemplo (versión Access 2000) - 26 Kb.

2008 Patxi Sanz
Libro de visitas
Hosted by www.Geocities.ws

1