Предполагая, что вы запрашиваете WinForms, вы можете использовать FormClosing() event. Событие FormClosing() запускается в любое время, когда форма закрывается.
Чтобы определить, щелкнул ли пользователь X или ваш CloseButton, вы можете получить его через объект отправителя. Попробуйте отправить отправителя как элемент управления Button и, возможно, проверьте, например, его имя «CloseButton».
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.
}
В противном случае, я никогда никогда не нужно было различать, была ли нажата X или CloseButton, как я хотел, чтобы выполнить что-то конкретное о событии FormClosing, как закрыть все MdiChildren перед закрытием MDIContainerForm или проверки событий для несохраненных изменений , По мне, в этих условиях нам не нужно отличать ни от одной из кнопок.
Закрытие по ALT +F4 будет также инициировать событие FormClosing(), так как он посылает сообщение в форме, которая говорит, чтобы закрыть. Вы можете отменить событие, установив
FormClosingEventArgs.Cancel = true.
В нашем примере это означало бы быть
e.Cancel = true.
Обратите внимание на разницу между FormClosing() и FormClosed() события.
FormClosing происходит, когда форма получила сообщение, которое должно быть закрыто, и проверить, есть ли у него что-то делать до его закрытия.
FormClosed происходит, когда форма фактически закрыта, поэтому после ее закрытия.
Помогает ли это?
который близко кнопка вы имеете в виду? –
Что такое кнопка «Закрыть»? – SLaks
например, закрытие «ALT + F4» – Bohn