退出时需要双重确认

10

我正在尝试在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(); }

1
这段代码在哪里运行? - Alastair Pitts
1
我假设你正在处理窗体关闭事件。我认为你不需要使用Application.Exit()。 - Harvey Kwok
是的,表单正在关闭,但我确实需要使用application.exit(),因为还有另一个窗口需要同时关闭。 - Sean
在你的 Application.Run() 中,你传入了哪个窗体? - Harvey Kwok
StartupWindow(),正在关闭的窗口是BackupWindow()。如果其中一个关闭,我需要两个都关闭,所以我发现最简单的方法是使用Application.Exit()。 - Sean
我明白了... 那么Lambert会为你解答 :) - Harvey Kwok
4个回答

12

使用此功能

 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;
        }        
    }

6
啊,你有检查 FormClosing 事件的 CloseReason 吗?我认为你可能会因为两个不同的原因得到相同的事件(虽然我不指望通常会发生这种情况);检查你的 FormClosingEventArgs 来查看参数是什么。

6

啊,我找到了解决方法。我将FormClosing事件中的Application.Exit();代码删除,改为在FormClosed事件中执行。现在一切都正常了。


我遇到了和你一样奇怪的问题,而你的答案完美地解决了它。 - 8oris

1
作为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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接