none
¿Hay forma de determinar que la razón del cierre del formulario es por la presión explícita del botón X?

    Pregunta

  • O sea ¿hay alguna manera de distinguir que el formulario se cerró o mejor dicho, se intenta cerrar por presionar específicamente el botón X y no porque se presionó por ejemplo Alt+F4 o porque se invocó al método close() explícitamente o por cualquier otra razón?

    En otras palabras saber inequívocamente que se presionó el botón X (de la barra de título) del formulario.

    • Editado James-2016 miércoles, 2 de noviembre de 2016 21:13
    miércoles, 2 de noviembre de 2016 21:12

Respuestas

  • El evento Form_Closing tiene en su argumento FormClosingEventArgs una propiedad llamada CloseReason que te dice por qué se cerro el formulario (por ejemplo, porque se está haciendo un shutdown de Windows, o porque se cierra el formulario padre, o porque se cierra la aplicación que lo contiene). Lamentablemente solo tiene un único valor "UserClosing" que indica que el formulario se está cerrando porque lo pidió el usuario, sin diferenciar cuál fue la manera en la que el usuario lo pidió, así que no distingue entre la X y el Alt+F4. Me temo que no vas a encontrar una manera sencilla para hacer esta distinción. Seguramente tendrás que interceptar a bajo nivel los mensajes de Windows para capturar las pulsaciones de teclado (a ver si se pulsó el Alt y luego la F4) y los movimientos y clics del ratón (a ver si lo llevaron a la esquina que tiene la X).
    • Marcado como respuesta James-2016 miércoles, 2 de noviembre de 2016 21:52
    miércoles, 2 de noviembre de 2016 21:32

Todas las respuestas

  • El evento Form_Closing tiene en su argumento FormClosingEventArgs una propiedad llamada CloseReason que te dice por qué se cerro el formulario (por ejemplo, porque se está haciendo un shutdown de Windows, o porque se cierra el formulario padre, o porque se cierra la aplicación que lo contiene). Lamentablemente solo tiene un único valor "UserClosing" que indica que el formulario se está cerrando porque lo pidió el usuario, sin diferenciar cuál fue la manera en la que el usuario lo pidió, así que no distingue entre la X y el Alt+F4. Me temo que no vas a encontrar una manera sencilla para hacer esta distinción. Seguramente tendrás que interceptar a bajo nivel los mensajes de Windows para capturar las pulsaciones de teclado (a ver si se pulsó el Alt y luego la F4) y los movimientos y clics del ratón (a ver si lo llevaron a la esquina que tiene la X).
    • Marcado como respuesta James-2016 miércoles, 2 de noviembre de 2016 21:52
    miércoles, 2 de noviembre de 2016 21:32
  • Ok, gracias, veo que no es tan sencillo, debería producirse un evento al presionar una de los botones maximizar, minimizar, restaurar, cerrar.
    miércoles, 2 de noviembre de 2016 21:52