如何创建捕获用户响应的消息框?

时间:2012-01-27 14:44:13

标签: c# winforms

我正在尝试查看消息框。当用户在子窗口处于活动状态时尝试退出程序时,应该会发生这种情况。如果没有活动子窗口,则应用程序应该结束。我写了一些代码但是当用户点击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();
        }   

    }

4 个答案:

答案 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();

            }

从代码中删除它