Creación de botones para Cuadro de Lista Access

Tengo creado un campo de tipo lista que me trae la información de los Items de la Factura que seleccione

Entonces hay facturas que tienen muchos Items, y el tamaño del campo de tipo lista no se puede visualizar todos los Items el muestra una barra para poder bajar y subir, y ver todos los Items

Pero la pregunta es : hay alguna forma de que cuando esto suceda que la factura tenga muchos Items

Entonces con 2 botones uno de subida y el otro de bajada se pueda bajar o subir el campo de tipo lista

Adjunto imagen . Para que me puedan entender

2 Respuestas

Respuesta
1

Seleccionado un Item cualquiera del cuadro de lista, con los cursores se puede desplazar arriba y abajo de uno en uno, además de poder desplazarse 'por grupos' con el avance/retroceso de página.
Es una opción con más alternativas y a menor costo que la creación de los botones.

Buen día

Gracias por su respuesta

Pero lo requiero por que hacemos un proceso con un portátil con pantalla Touch

Entonces la información que capturamos solo lo hacemos con pantalla touch, (sin teclado) por ende requerimos si se puede tener estos botones para una mejor captura de información

Los cuadros de lista tienen una propiedad (ListIndex) que es de lectura y escritura

Su valor más bajo es el cero y el más alto ListCount al que se le resta una unidad (comienza en cero)
Basta desplazarlo al siguiente (ListIndex +1) o al anterior (ListIndex -1) cuidando que no se sobrepasen los limites (0 y ListCount -1) para evitar errores.

Por cierto, un par de botones más ( para saltar: 3, 10, 100 o el numero de elementos que presenta) y el desplazamiento será más veloz, también otro para ir al primero o ultimo pueden ser útiles o un cuadro de texto para indicar cuantos se desplaza.

Buen día

pero como lo puedo ejecutar ...

O como seria el código en VB

Un cuadro de lista ==> List1
Dos botones uno sube ==> Subir_1   ///  otro baja ==> Bajar_1
En sus respectivos eventos  'al hacer Click' 

El de bajada:

Private Sub Bajar_1_Click()
Me.Lista1.SetFocus
If Me.Lista1.ListIndex < 0 Then Me.Lista1.ListIndex = 0: Exit Sub
If Me.Lista1.ListIndex > 0 Then Me.Lista1.ListIndex = (Me.Lista1.ListIndex - 1)
End Sub

El de subida

Private Sub Subir_1_Click()
Me.Lista1.SetFocus
If Me.Lista1.ListIndex < 0 Then Me.Lista1.ListIndex = 0: Exit Sub
If Me.Lista1.ListIndex < Me.Lista1.ListCount - 1 Then Me.Lista1.ListIndex = (Me.Lista1.ListIndex + 1)
End Sub

.- Para que funcione, el objeto ha de tener el foco (se esta en otro objeto: el botón) 
.- Si no hay un Item seleccionado su 'valor' es -1, el botón bajar selecciona el primero (el cero) y el botón subir selecciona el ultimo (ha sido mi libre elección, podría también ir al primero ..)
.- Se verifica que no esta en el primero/ultimo -si se cumple- sube/baja según corresponda.

Para 'ir mas aprisa' puede saltar de dos en dos ... etc. pero se ha de modificar la verificación de la actual posición para no salir de los limites .
(Por ejemplo: botón lento uno a uno // botón rápido de cinco en cinco)

¡Gracias! 

Puse una línea que no se corresponde, para ir al ultimo (si no hay ningún Item seleccionado):

If Me.Lista1.ListIndex < 0 Then Me.Lista1.ListIndex = Me.Lista1.ListCount -1 : Exit Sub
Respuesta
1

Te voy a hacer una pregunta capciosa. Imagínate que tuvieras 1000 referencias. Podrías estar media vida desplazándote hasta localizar una. ¿No sería mejor, por ejemplo, que a medida que vayas escribiendo el nombre, vaya "recortando" las posibilidades. Por ejemplo, tengo un combinado con los productos que ves en el formulario y un combinado.

Si, por ejemplo,

escribo ta

Ya me "recorta" los productos a los que tienen la cadena ta en alguna parte del nombre. Si le añado una l

Ya me los redujo a dos

Y el código es simplemente( el combinado se llama ElegirOtro)

Private Sub ElegirOtro_Change()
DoCmd.SetWarnings False
ElegirOtro.SetFocus
ElegirOtro.RowSource = "select producto from productos where producto like '*" & Me.ElegirOtro.Text & "*'"
ElegirOtro. Dropdown
ElegirOtro. SetFocus
End Sub

Buen día

Gracias por la respuesta

Lo que pasa es que al momento de seleccionar 1 item o varios al tiempo se hace un INSERT a otra tabla creada, automáticamente se copia

Entonces no es necesario

Solamente se selecciona y se copia . por eso si es posible la opción de los botones (que solo se desplace hacia arriba o hacia abajo )

Por lo general (los Items son máximo 40 en promedio ) ya verifique en el sistema

Un ejemplo, ya que no sé como está construido tu formulario. Supongamos que tengo un cuadro de lista con nombres de clientes. Te añado el campo Idcliente, que no haría falta ninguna pero es para que veas como cambian los clientes. Al formulario le añado un cuadro de texto llamado Contador, que te dejo visible, pero que estaría oculto. Se podría hacer con variables pero prefiero no liarte ni códigos kilométricos.

Cuando pulso el botón hacia abajo, me muestra los diez siguientes( puedes suprimir la barra de desplazamiento).

Si lo vuelvo a pulsar

Si pulso el de subir

se vuelve al "estado anterior"

En este caso, en el evento Al cargar tengo puesto

Contador=0

en el evento Al hacer clic del botón de "bajar"

Private Sub Comando56_Click()
Contador = Contador + 1
Lista52.RowSource = "select cliente,idcliente from clientes where idcliente>10*contador"
End Sub

Es decir, que a contador le da valor 1 y sólo me muestra aquellos registros a partir del Idcliente>10. Cuando pulso otra vez, contador pasa a valer 2 y sólo me muestra aquellos registros con idcliente>20

Y así...

En el evento Al hacer clic del botón de "subir" tengo puesto

Private Sub Comando57_Click()
Contador = Contador - 1
Lista52.RowSource = "select cliente,idcliente from clientes where idcliente between (10*contador)+1 and (10*contador)+10"
End Sub

Es decir, me reduce en uno el valor de contador y me muestras los clientes con un Idcliente comprendido entre esos valores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas