bool ClosedFormMenu = false;
private void Cancel_btn_Click(object sender, EventArgs e)
{
DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(dialog == DialogResult.Yes)
{
ClosedFormMenu = true;
Application.Exit();
}
}
private void Form_closing(object sender, FormClosingEventArgs e)
{
DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(!ClosedFormMenu)
{
if (dialog == DialogResult.Yes)
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
return;
}
}
}
按X或取消按钮显示退出消息。按'是'在消息上,它将再次出现。我想消除这种现象。 我想实现该程序,以便在我单击取消按钮或X按钮时它将完全退出。 解答先谢谢。 谢谢。
答案 0 :(得分:2)
一旦调用Application.Exit(),就会调用事件方法Form_closing()。 这就是你的MessageBox出现两次的原因。
您在Cancel方法中调用它,退出应用程序,应用程序调用Form_Closing()并再次显示MessageBox。
你应该只打电话
Application.Exit();
在Cancel_btn_Click方法中。
您可以将代码缩减为以下内容:
private void Cancel_btn_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void Form_closing(object sender, FormClosingEventArgs e)
{
DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialog == DialogResult.No)
e.Cancel = true;
// TODO: Add 'else' if you want to call a cleanup
// method or do something before the application closes.
}
为什么'返回' Form_closing()中缺少?
'返回'缺少,因为这是一个返回类型为' void'的方法。 预计不会返回'任何事情,因为我们不需要提前退出方法,我们不需要它。
为什么' Application.Exit()' Form_closing()中缺少?
应用程序已收到退出命令。这就是它关闭表格的原因。因此,我们不需要它。
答案 1 :(得分:1)
从按钮处理程序调用Application.Exit()也调用Form_closing()。在按钮处理程序和Form_closing()中都有对话框会使问题出现两次。试试这个:
private void Cancel_btn_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void Form_closing(object sender, FormClosingEventArgs e)
{
DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialog == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}