Zakładając, że pytasz o WinForms, możesz użyć zdarzenia FormClosing () . Zdarzenie FormClosing () jest wyzwalane za każdym razem, gdy formularz ma zostać zamknięty.
Aby wykryć, czy użytkownik kliknął X lub przycisk CloseButton, możesz go uzyskać za pośrednictwem obiektu nadawcy. Spróbuj rzutować nadawcę jako kontrolkę Button i sprawdź, na przykład, jej nazwę „CloseButton”.
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if (string.Equals((sender as Button).Name, @"CloseButton"))
else
}
W przeciwnym razie nigdy nie musiałem rozróżniać, czy kliknięto X lub CloseButton, ponieważ chciałem wykonać coś konkretnego na zdarzeniu FormClosing, na przykład zamknąć wszystkie MdiChildren przed zamknięciem MDIContainerForm lub sprawdzić zdarzenia pod kątem niezapisanych zmian. W tych okolicznościach nie musimy według mnie odróżniać żadnego z przycisków.
Zamknięcie przez ALT+ F4wyzwoli również zdarzenie FormClosing (), ponieważ wysyła komunikat do Form z informacją o zamknięciu. Możesz anulować wydarzenie, ustawiając
FormClosingEventArgs.Cancel = true.
W naszym przykładzie oznaczałoby to
e.Cancel = true.
Zwróć uwagę na różnicę między zdarzeniami FormClosing () i FormClosed () .
FormClosing ma miejsce, gdy formularz otrzymał wiadomość do zamknięcia i sprawdź, czy ma coś do zrobienia, zanim zostanie zamknięty.
FormClosed występuje, gdy formularz jest faktycznie zamknięty, a więc po jego zamknięciu.
czy to pomaga?