如何创建一个捕获用户';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();
        }   
    }

如何创建一个捕获用户';s的回应

根据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();
            }

只需将其从代码中删除即可