如何创建一个捕获用户';s的回应
本文关键字:用户 回应 一个 何创建 创建 | 更新日期: 2023-09-27 18:21:51
我正在尝试查看一个消息框。当用户试图在子窗口处于活动状态的情况下退出程序时,就会发生这种情况。如果没有活动的子窗口,那么应用程序应该结束。我已经写了一些代码,但当用户点击"否"时,消息框会立即再次弹出。如果你有更好的方法,请随时分享,谢谢。
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();
}
}
根据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;
}
}
}
也许您正在多次处理FormClosing
事件。您可以粘贴将MainWindow_FormClosing
添加到事件中的代码吗?
这是因为对Application.Exit()的调用。如果它是Main表单,为什么需要它?你可以通过在功能的顶部添加此检查来过滤掉
if(e.CloseReason == CloseReason.ApplicationExitCall) return;
else if (res == DialogResult.Yes)
{
Application.Exit();
}
只需将其从代码中删除即可