【问题标题】:Exit my application with Yes No message box使用 Yes No 消息框退出我的应用程序
【发布时间】:2017-11-07 19:51:54
【问题描述】:

我正在使用下面的代码退出我的整个应用程序应用程序,并带有 YesNo 问题messagebox 我的问题是,有时我收到了两次消息,而其他时候我正确地收到了一条消息显示..

任何人都可以帮助我为什么会发生这种情况??

    private void AppClose_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void F0100_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult result;
        result = MessageBox.Show("Are you sure you want to exit?", "Exit Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.Yes)
        {
            //Environment.Exit(1);
            Application.Exit();
        }
        else
        { e.Cancel = true; }
    }

【问题讨论】:

  • 您的Show 调用似乎没有足够的参数。
  • 所以你试图强制关闭整个应用程序,而不仅仅是这个表单,对吗?而且这种形式不是主要形式……对吧?
  • @DonBoitnott 对不起错别字
  • 您始终需要检查 e.CloseReason 以验证您是否真的要显示此消息框。很多理由不这样做,比如 WindowsShutdown。和 ApplicationExitCall :)
  • 很少有用户意外退出程序。不要用需要他们注意的不必要的对话框来打扰用户。

标签: c# winforms


【解决方案1】:

我假设有问题的表单是您的主要表单,即您将这个 Form 启动为 Application.Run(new Form1());

如果是这种情况,通常您不需要在FormClosingYes 分支下执行Application.Exit()。所以你的代码应该如下所示

private void F0100_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason  != CloseReason.UserClosing)
        return;

    DialogResult result;
    result = MessageBox.Show("Are you sure you want to exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (result != DialogResult.Yes)
    {
        e.Cancel = true;
    }
}

多余的Application.Exit() 调用,创建了一个额外的FormClosing 事件

注意:您还应该检查FormClosingEventArgs.CloseReason,这样您就不会在说用户正在注销或终止进程时创建额外的弹出窗口。

【讨论】:

    【解决方案2】:

    那么this answer 可能会对您有所帮助。基本上,您需要使用您注释掉的那个:Environment.Exit(0)Application 是一种优雅的退出尝试关闭表单的尝试。您的表单仍处于打开状态,因此它会收到第二个 FormClosing 电话。这完全取决于时间,真的,但我认为大多数时候你会看到两次提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多