Недвижимость
FormClosingEventArgs.CloseReason
доступен только для чтения, поэтому вы не можете изменить его вручную после запуска события Closing.
Что вам нужно сделать, так это определить собственное перечисление CloseReason.
enum CloseReason
{
Apply, Cancel, X, AltF4 // etc...
}
И добавьте в форму две переменные:
private:
bool forceClose = false;
CloseReason closeReason;
Затем в методе FormClosing напишите этот код (здесь я предполагаю, что событие вызывает метод с именем Form1_FormClosing):
void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
if (!forceClose)
e->Cancel = true;
}
Таким образом, по умолчанию форма не закрывается, когда пользователь пытается ее закрыть.
Теперь для каждого «альтернативного» метода закрытия формы вам нужно написать другой обработчик событий, который сообщает форме, как она закрывается, а также фактически закрывает ее, если это необходимо. Например, если у вас есть кнопка с именем ApplyButton, которую вы хотите закрыть форму:
void ApplyButton_Click(Object sender, EventArgs e)
{
closeReason = CloseReason::Apply;
forceClose = true;
this->Close();
}
И просто повторите этот формат для других методов закрытия. Когда ваш пользователь закрывает форму с помощью «X», будет вызываться только метод FormClosing, поэтому вам нужно написать дополнительный код в этом методе, если вы хотите, чтобы произошло что-то особенное.
person
Alex Walker
schedule
31.10.2013