Проверка, если WinForm C# закрыт
Я использую событие FormClosing в C# Windows Form, чтобы попросить пользователя подтвердить перед выходом. Я хочу показать это сообщение, только если пользователь специально закрыл форму, используя красный крестик в углу окна формы. Когда я закрываю или скрываю форму вручную, я не хочу показывать подтверждающее сообщение (например, вручную вызывая form.Close()).
Можно ли проверить, нажал ли пользователь красный крестик?
Благодарю.
5 ответов
Если вы программно позвоните this.Close()
или пользователь нажимает X, вы получаете CloseReason.UserClosing
для обоих, так что это не действительная проверка.
Посмотрите код ниже для "хакерского" решения, которое в основном вызывает это. Закройте, если OnClosing передан null
параметр.
private void button1_Click(object sender, EventArgs e)
{
OnClosing(null);
}
protected override void OnClosing(CancelEventArgs e)
{
if (e == null)
{
// Raise your Message or Cancel
this.Close();
}
else
{
base.OnClosing(e);
}
}
Вы можете проверить CloseReason
свойство аргументов события, переданных FormClosing
событие.
Использование FormClosing
обработчик событий и поместите этот простой код:
if (MessageBox.Show(this, "Do you want to close the Application?", "Exit App", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
e.Cancel = true;
}
else
{
//close app code
}
Из коробки нет простого способа обнаружить такое поведение. Хотя есть свойство "FormClosingEventArgs.CloseReason", которое вы можете проверить в событии FormClosing, на самом деле оно не будет конкретно указывать причину закрытия.
Из MSDN описание значения перечисления UserClosing:
Пользователь закрывает форму через пользовательский интерфейс, например, нажимая кнопку "Закрыть" в окне формы, выбирая "Закрыть" в меню управления окна или нажимая ALT+F4.
Итак, как вы можете видеть, есть много причин, но не одна конкретно.
Я думаю, что лучшее, что вы собираетесь сделать, - это удалить границу окна (включая кнопки) и поместить на нее свою собственную кнопку закрытия, и перехватить событие щелчка, чтобы получить желаемое поведение. Я видел, как это было сделано раньше, и оно работает, хотя может выглядеть не так хорошо, как обычные кнопки окна.