我有一个退出表单的按钮,这是代码
DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.No)
{
}
else
{
Application.Exit();
}
我尝试使用调试器模式,然后单击“是”后,它会通过Application.Exit(),然后激活FormClosing事件,然后运行相同的对话框。
我也尝试删除FormClosing事件中的代码,因此它只有Application.Exit(),但使用Alt + F4或单击X按钮将自动退出应用程序。
我的问题是如果他想退出程序而不是两次触发对话框,我该如何质疑用户?
提前致谢,我让大家都知道我只是一个初学者,这是我最大的项目,所以我想要做到这一点。
答案 0 :(得分:3)
这是一个例子。它只要求确认关闭是否由用户启动 - 当Windows重新启动时,您可能不希望弹出MessageBox。
private void form_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Application.Exit();
}
}
else
{
// Cancel the close
e.Cancel = true;
}
}
答案 1 :(得分:0)
有两种方法可以实现这一目标。
我假设,在这两种情况下都需要此确认,按钮单击和“x”按钮单击,您在两个处理程序中都放了相同的代码。
接近一个
在按钮单击的处理程序中,当您要求用户确认并且用户是否单击“是”时。 在排队之前,
Application.Exit();
您应该取消订阅表格结束活动。通过这样做,它不能在执行Application.Exit()
时引发表单关闭事件假设您的表单是MainForm并且事件是MainForm_Closing,它看起来像,
private void btnClose_Click(object sender, EventArgs e)
{
DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
this.FormClosing -= MainForm_FormClosing;
Application.Exit();
}
}
因此在执行Application.Exit()
时不会提升表单结束事件,因此您的问题将得到解决。
接近两个
正如stuartd所建议的那样(根据我的说法更为清晰。为此+1),您可以在Form Closing
事件处理程序中检查表单结束原因。
注意他的示例代码中存在一些问题(错误)[您已经接受了答案!!]。错误点击'x' button
或Alt+F4
后;如果用户在确认消息上单击“否”,则表示正在关闭表单,因为没有处理其他条件。正确的解决方案应如下所示。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
Application.Exit();
else
e.Cancel = true; //stopping Form Close perocess.
}
}