C#退出消息框弹出两次。我想要生成一次事件。

时间:2018-02-16 11:31:47

标签: c# wpf messagebox

bool ClosedFormMenu = false;

    private void Cancel_btn_Click(object sender, EventArgs e)
    {
        DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if(dialog == DialogResult.Yes)
        {
            ClosedFormMenu = true;
            Application.Exit();
        }
    }

    private void Form_closing(object sender, FormClosingEventArgs e)
    {
        DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if(!ClosedFormMenu)
        {
            if (dialog == DialogResult.Yes)
            {
                Application.Exit();
            }
            else if (dialog == DialogResult.No)
            {
                e.Cancel = true;
                return;
            }
        }

    }

按X或取消按钮显示退出消息。按'是'在消息上,它将再次出现。我想消除这种现象。 我想实现该程序,以便在我单击取消按钮或X按钮时它将完全退出。 解答先谢谢。 谢谢。

2 个答案:

答案 0 :(得分:2)

一旦调用Application.Exit(),就会调用事件方法Form_closing()。 这就是你的MessageBox出现两次的原因。

您在Cancel方法中调用它,退出应用程序,应用程序调用Form_Closing()并再次显示MessageBox。

你应该只打电话

Application.Exit();

在Cancel_btn_Click方法中。

您可以将代码缩减为以下内容:

private void Cancel_btn_Click(object sender, EventArgs e)
{
    Application.Exit();
}

private void Form_closing(object sender, FormClosingEventArgs e)
{
    DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if (dialog == DialogResult.No)
        e.Cancel = true;
    // TODO: Add 'else' if you want to call a cleanup
    // method or do something before the application closes.
}

为什么'返回' Form_closing()中缺少?

'返回'缺少,因为这是一个返回类型为' void'的方法。 预计不会返回'任何事情,因为我们不需要提前退出方法,我们不需要它。

为什么' Application.Exit()' Form_closing()中缺少?

应用程序已收到退出命令。这就是它关闭表格的原因。因此,我们不需要它。

答案 1 :(得分:1)

从按钮处理程序调用Application.Exit()也调用Form_closing()。在按钮处理程序和Form_closing()中都有对话框会使问题出现两次。试试这个:

private void Cancel_btn_Click(object sender, EventArgs e)
{
    Application.Exit();
}

private void Form_closing(object sender, FormClosingEventArgs e)
{
    DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "program close", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if (dialog == DialogResult.Yes)
    {
        e.Cancel = false;
    }
    else
    {
        e.Cancel = true;
    }

}