Supponendo che tu stia chiedendo WinForms, puoi usare l' evento FormClosing () . L'evento FormClosing () viene attivato ogni volta che un modulo deve essere chiuso.
Per rilevare se l'utente ha cliccato su X o sul tuo CloseButton, puoi ottenerlo tramite l'oggetto mittente. Prova a eseguire il cast del mittente come controllo Button e verifica forse il nome "CloseButton", ad esempio.
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.
}
Altrimenti, non ho mai avuto bisogno di differenziare se X o CloseButton è stato cliccato, poiché volevo eseguire qualcosa di specifico sull'evento FormClosing, come chiudere tutti gli MdiChildren prima di chiudere MDIContainerForm o controllare gli eventi per le modifiche non salvate. In queste circostanze, secondo me, non è necessario distinguere da nessuno dei due pulsanti.
La chiusura con ALT+ F4attiverà anche l'evento FormClosing (), poiché invia un messaggio al Form che dice di chiudere. È possibile annullare l'evento impostando il
FormClosingEventArgs.Cancel = true.
Nel nostro esempio, questo si tradurrebbe in essere
e.Cancel = true.
Notare la differenza tra FormClosing () e FormClosed () .
FormClosing si verifica quando il modulo ha ricevuto il messaggio da chiudere e verifica se ha qualcosa da fare prima che venga chiuso.
FormClosed si verifica quando il modulo è effettivamente chiuso, quindi dopo che è stato chiuso.
questo aiuta?