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

C# The exit message box pops up twice. I want to generate an event once.

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 或取消按钮显示退出消息。在消息上按 'Yes',它将再次出现。我想消除这种现象。 我想实现该程序,以便在我单击取消按钮或 X 按钮时它会完全退出。 提前致谢。 谢谢。

从按钮处理程序调用 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;
    }

}

只要你调用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() 中缺少 'return'?

'return' 缺失,因为这是 return 类型 'void' 的方法。 它不需要 'return' 任何东西,因为我们不需要过早退出该方法,所以我们不需要它。

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

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