我想在用户试图关闭应用程序时显示对话框(红色窗口交叉和我的表单上的按钮)但是当Windows关闭时,此对话框阻止关闭,所以我想要在应用程序检测窗口关闭时向下,没有对话进行。这是我的代码
表单加载后我抓住关闭事件:
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
和
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
break;
case CloseReason.WindowsShutDown:
e.Cancel = false; //this is propably dumb
break;
default:
break;
}
}
但是当用户关闭应用程序时,对话框会显示2次。第一个对话框做任何事情,在第二个对话框后执行操作。 如何在Windows关闭时显示仅关闭一次的对话框而不显示对话框(因为Windows正在等待我的应用程序关闭)?
答案 0 :(得分:4)
编写此代码的更好方法(我的观点)是不订阅表单事件,而是使用可用的覆盖方法:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
break;
case CloseReason.WindowsShutDown:
e.Cancel = false; //this is propably dumb
break;
default:
break;
}
base.OnFormClosing(e);
}
您可能需要考虑仅使用if (e.CloseReason == CloseReason.UserClosing)
而不是基于其当前表单的switch语句。 <{1}}默认情况下已经为False,因此您无需进行激活设置。