Если вы запрашиваете WinForms, вы можете использовать событие FormClosing () . Событие 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 возникает, когда форма действительно закрыта, поэтому после ее закрытия.
Помогает ли это?