Suponiendo que solicita WinForms, puede usar el evento FormClosing () . El evento FormClosing () se activa cada vez que se va a cerrar un formulario.
Para detectar si el usuario hizo clic en X o en su CloseButton, puede obtenerlo a través del objeto del remitente. Intente convertir el remitente como un control de botón, y verifique tal vez por su nombre "CloseButton", por ejemplo.
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if (string.Equals((sender as Button).Name, @"CloseButton"))
// Do something proper to CloseButton.
else
// Then assume that X has been clicked and act accordingly.
}
De lo contrario, nunca he necesitado diferenciar si se hizo clic en X o CloseButton, ya que quería realizar algo específico en el evento FormClosing, como cerrar todos los MdiChildren antes de cerrar MDIContainerForm, o verificar el evento para detectar cambios no guardados. En estas circunstancias, no necesitamos, según yo, diferenciarnos de ninguno de los dos botones.
Cerrar con ALT+ F4también activará el evento FormClosing (), ya que envía un mensaje al formulario que dice que se cierre. Puede cancelar el evento configurando el
FormClosingEventArgs.Cancel = true.
En nuestro ejemplo, esto se traduciría en
e.Cancel = true.
Observe la diferencia entre los eventos FormClosing () y FormClosed () .
FormClosing ocurre cuando el formulario recibió el mensaje para ser cerrado y verifica si tiene algo que hacer antes de que se cierre.
FormClosed ocurre cuando el formulario está realmente cerrado, es decir, después de que se cierra.
¿Esto ayuda?