C# 出口双重确认

C# 出口双重确认,c#,winforms,exit,confirm,C#,Winforms,Exit,Confirm,我正在尝试这样做,以便提示用户确认退出c#中的我的程序,但由于某种原因,如果他们说“是”他们想退出,确认框将再次弹出。我不明白为什么 if (MessageBox.Show("Are you sure you want to exit?", "Confirm exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { e.Cancel = true; }

我正在尝试这样做,以便提示用户确认退出c#中的我的程序,但由于某种原因,如果他们说“是”他们想退出,确认框将再次弹出。我不明白为什么

    if (MessageBox.Show("Are you sure you want to exit?", "Confirm exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
    {
        e.Cancel = true;
    }
    else { Application.Exit(); }

啊,您是否检查了
FormClosing
事件的
CloseReason
?我想你可能会因为两个不同的原因得到相同的事件(尽管我并不完全期望这种情况正常发生);检查您的
表单closingeventargs
以查看参数是什么。

啊,我找到了解决方法。我删除了应用程序。Exit();事件,并将其移动到FormClosed事件中。现在一切都正常了。

用这个

 private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Are you sure you want to close?", "Infomate", MessageBoxButtons.YesNo) == DialogResult.No)
        {
            e.Cancel = true;
        }        
    }

作为SFD,他说您需要使用消息框创建事件。我添加了一个过滤器,如果用户正在关闭表单,它会显示一个警告消息框:

    private void close_confirmation(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.FormOwnerClosing)
        {
            if (MessageBox.Show("Are you sure you want to close?", "Application", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
您需要将事件分配给表单以使其正常工作:

this.FormClosing += new FormClosingEventHandler(close_confirmation);
如果要使其停止,以便用户可以在不显示消息的情况下再次关闭窗口:

this.FormClosing -= close_confirmation;

这段代码在哪里运行?我假设您正在处理表单关闭事件。我认为您不需要Application.Exit()是的,表单关闭,但我确实需要Application.Exit(),因为我需要同时关闭另一个打开的窗口。在您的Application.Run()中,您要传入哪个表单?StartupWindow(),正在关闭的窗口是BackupWindow()。如果其中一个关闭,我需要两个都关闭,所以我发现最简单的方法就是简单地使用Application.Exit()。