Cómo saber si se hizo Click en un Botón de Comando

Tengo un botón de comando en un formulario que al hacer Click o al estar sobre el y presionar enter cierra un formulario. Necesito detectar cuando se produjo una de estas acciones para inhabilitar un evento cancel de un cuadro de texto.

Respuesta

Si el botón ejecuta algún evento, es en ese evento donde se puede añadir la validación.

Otra alternativa es (dado que se cierra el formulario) en el evento 'antes de actualizar' del formulario verificar si el objeto activo es el botón o si el botón en cuestión fie el anterior objeto activo.

Y añadiré otra alternativa, en el evento del botón activar una variable que (en el evento 'antes de actualizar' del formulario) verifique su estado y si esta activada (la variable antes mencionada) inhabilite el el evento cancel del cuadro de texto.

Ampliar lo del 'evento cancel de un cuadro de texto' seria una forma de dar alternativas mas concretas y (posiblemente) acertadas cara a solucionar el problema, no hay que perder de vista que el parámetro Cancel se puede enviar al llamar al evento y sobreponerse al que toma por defecto.

Tengo un cuadro de texto que en el evento salir controle si está vació (IsNull), de ser así me arroje un mensaje y no me deje seguir hasta que se ingrese el dato.

El problema es que al cerrar el formulario (si ya alguna vez se generó la acción de mostrar el Mensaje), me lo vuelve a mostrar un par de veces.

Por ello hice un botón cerrar y en el que si ese cuadro de texto IsNull omita el mensaje de carga del dato y cierre el formulario

Creo que lo más sencillo es evaluar si el objeto anterior fue el botón que se utiliza para salir y (de serlo) abortar la validación.

Como primera línea de la validación del contenido ubicar esta:

If Screen.PreviousControl.Name = "Btn_Salir" Then Exit Sub
'***** aqui el codigo actual ****

2 respuestas más de otros expertos

Respuesta

Otra posibilidad, aunque honestamente no entiendo la pregunta, es que en el formulario crees un cuadro de texto, visible o no y en ese evento que dices del botón pongas algo como

TextoA=time()

Así, cuando pulses el botón sabrás a que hora lo pulsaste por última vez.

Respuesta

Pruebe con esto. Cree una variable global

Public g_botonClicado As Boolean

En el evento  Click del botón de comando (asumo que el botón se llama btnCerrar)

Private Sub btnCerrar_Click()
    ' Establece la variable global a True cuando el botón es clicado
    g_botonClicado = True
    ' Cierra el formulario
    DoCmd.Close acForm, Me.Name
End Sub

Manejar el Evento KeyDown en el Formulario

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        ' Verifica si el botón fue clicado previamente
        If g_botonClicado Then
            ' Restablece la variable global y permite la acción normal del Enter
            g_botonClicado = False
        Else
            ' Puede manejar el evento Cancel del cuadro de texto aquí
            MsgBox "Enter presionado, pero el botón no fue clicado."
        End If
    End If
End Sub

En la hoja de propiedades, establece la propiedad Tecla de vista previa  del formulario a Sí.

La variable global g_botonClicado se utiliza para verificar si el botón ha sido clicado.
El evento Click del botón de comando establece esta variable en True.
El evento KeyDown del formulario comprueba esta variable para determinar si el Enter fue presionado mientras el botón estaba en foco o si debe cancelarse la acción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas