¿Qué puedo hacer para que no cambie el registro tipo combinado y se mantenga el valor seleccionado?

Al seleccionar una opción de un registro tipo cuadro combinado, cuando me desplazo por el formulario moviendo la rueda del ratón, la opción señalada va cambiando, ¿cómo puedo hacer para que no pase esto y se mantenga el valor seleccionado?
1

1 Respuesta

165.800 pts. Más de 35 años en la informática y más de 20 trabajando...
Al utilizar un objeto que te admite desplazarte dentro de él con el ratón, te puede ocurrir esas cosas.
Yo me plantearía la posibilidad de activar el siguiente objeto una vez que hayas cambiado el valor del "cuadro combinado" usando un código de este estilo:
Private Sub Cuadro_combinado0_Click()
    Me.Texto2.SetFocus
End Sub
Si activas un cuadro de texto, entiendo que el ratón volverá a afectar al formulario y no al cuadro combinado.
Hola experto,
Gracias por la respuesta, aunque no me había fijado bien en qué es lo que pasa. Lo que realmente pasa es que cambia de registro, que es casi peor, porque se podría llegar a escribir información en otro sitio distinto, así que la pregunta sería cómo hacer para que, mientras se está completando un formulario, no cambie de registro al intentar desplazarte por él con el ratón.
Muchas gracias,
Supongo que tendrías que validar los datos del registro actual antes de permitir que se mueva.
Para ello genera una función en la cual hagas todas las validaciones y te devuelva un valor booleano con el resultado. Sería algo así:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Not okDatosFormulario() Then Cancel = True
End Sub
Function okDatosFormulario() As Boolean
    okDatosFormulario = False
    If Trim$(Nz(Me.campo1, "")) = "" Then Exit Function
    If Trim$(Nz(Me.campo2, "")) = "" Then Exit Function
    If Trim$(Nz(Me.campoMes, "")) = "" Then Exit Function
    If Not IsNumeric(Me.campoMes) = "" Then Exit Function
    If Val(Me.campoMes) < 1 Or Val(Me.campoMes) > 12 Then Exit Function
    okDatosFormulario = True
End Function
¿Tengo qué listar cada campo de mi formulario?, esto es, en campo1, campo2, etc., ¿tengo qué poner el nombre de los campos del formulario?
Lo que me refiero es que para dar por bueno un registro deberías validar que están todos los campos 'obligatorios' grabados.
De esta forma, si se intenta cambiar de registro y no se ha rellenado todos los dato, el proceso cancelará esa acción siempre que falle algún dato de los necesarios.
No es una forma de evitar que el ratón cambie de registro, pero así te aseguras que los datos están completos antes de cambiar de registro y que no se quedan a medias.
En respuesta a tu pregunta: sí. Tendrías que ir comprobando el contenido de los campos uno por uno haciendo las validaciones normales:
- Que el campo no esté vacío (si es que no puede estarlo)
- En los numéricos validar que han tecleado números
- En los de tipo fecha comprobar que es una fecha válida
- Etc...
Es una función un poco 'rollo', pero conviene hacerla siempre para que no se introduzcan valores que después pueden dar problemas.
Cambiando de tema. Otra forma que evita el uso de la rueda del ratón, aunque no sé si te deja usarla para moverte dentro del formulario, sería esta:
Dim snRuedaRaton As Boolean
Dim nRegAnt As Long
Private Sub Form_Current()
    If snRuedaRaton Then
        snRuedaRaton = False
        Recordset.AbsolutePosition = nRegAnt
    End If
End Sub
Private Sub Form_Load()
    snRuedaRaton = False
End Sub
Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
    If Recordset.AbsolutePosition > 0 Then ' El registro no está borrado
        snRuedaRaton = True
        nRegAnt = Recordset.AbsolutePosition
    End If
End Sub
A ver si con esto hay suerte.
Muchas gracias por las soluciones y las rapidez en facilitarlas. Voy a probar todo esto, ayer pude probar una parte y tenía buena pinta.
Saludos,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas