我正在尝试查看消息框。当用户在子窗口处于活动状态时尝试退出程序时,应该会发生这种情况。如果没有活动子窗口,则应用程序应该结束。我写了一些代码但是当用户点击NO时,消息框会立即再次弹出。如果您有更好的方法,请随时分享,谢谢。
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
Form child = this.ActiveMdiChild;
if(child != null)
{
DialogResult res =
MessageBox.Show( child.Name +
"Do you want to exit?", "Exit",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (res == DialogResult.No)
{
e.Cancel = true;
child.Focus();
}
else if (res == DialogResult.Yes)
{
Application.Exit();
}
}
else if (child == null)
{
Application.Exit();
}
}
答案 0 :(得分:3)
根据MSDN,如果有取消关闭的子表单,则主表单的e.Cancel
已设置为true。此外,无需调用Application.Exit()
,因为在主窗体关闭后,应用程序应该结束。试试这个:
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
Form child = this.ActiveMdiChild;
if (child != null)
{
DialogResult res =
MessageBox.Show( child.Name +
"Do you want to exit?", "Exit",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (res == DialogResult.No)
{
e.Cancel = true;
child.Focus();
}
else
{
e.Cancel = false;
}
}
}
答案 1 :(得分:0)
也许您多次处理FormClosing
事件。您可以粘贴将MainWindow_FormClosing
添加到活动中的代码吗?
答案 2 :(得分:0)
这是因为对Application.Exit()的调用。如果它是Main表单,为什么还需要它呢? 您可以通过在函数顶部添加此检查来过滤掉它
if(e.CloseReason == CloseReason.ApplicationExitCall) return;
答案 3 :(得分:0)
else if (res == DialogResult.Yes)
{
Application.Exit();
}
从代码中删除它