private void frmAdmin_FormClosing(object sender, FormClosingEventArgs e)
{ if (DialogResult.Yes == MessageBox.Show("是否退出?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{ Application.Exit();
e.Cancel = false; }
else
{
e.Cancel = true;
}
}
对窗体的关闭叉的formclosing事件放入以上代码,退出询问时选择“否”则不关闭窗体,但是选“是”为什么不能马上关闭,而要回答两次呢?
private void frmAdmin_FormClosing(object sender, FormClosingEventArgs e)
{
if(_closing)
{
return;
}
if (DialogResult.Yes == MessageBox.Show("是否退出?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
_closing = true;
Application.Exit();
e.Cancel = false; }
else
{
e.Cancel = true;
}
}
1.当你选择“否”,执行
e.cancel=true
窗体不关闭。
2.当你选择"是"时,再弹出一个Message框,实际情况是:不管理你第二次选什么("是"或"否"),应用程序都会关闭(当然窗体也是)
过程是这样的: private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{ if (DialogResult.Yes == MessageBox.Show("是否退出?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{ //其它窗体关闭等资源释放
if (DialogResult.Yes == MessageBox.Show("是否退出?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{ //其它窗体关闭等资源释放 e.Cancel = false; }
else
{
e.Cancel = true;
}
e.Cancel = false; }
else
{
e.Cancel = true;
} }以下是修改后的代码: private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{ if (e.CloseReason != CloseReason.ApplicationExitCall)//当是调用 Application.Exit(方法时,不执行if下面的代码,直接关闭)
{
if (DialogResult.Yes == MessageBox.Show("是否退出?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{ Application.Exit(); }
else
{
e.Cancel = true;
}
}
}
{ DialogResult dr = MessageBox.Show("是否关闭程序!", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.No)
{
e.Cancel = true;
}
}
这样就可以了啊
我还是觉得有问题,这个窗体上主窗体么?是项目属性里设置的启动窗体么?如果不是,那窗体关闭确实有可能不能结束进程,不过如果这样,应该在启动这个窗体的地方去exit吧,在窗体的关闭事件里结束好奇怪