【问题标题】:C# Dialog keeps pop up when click yes in Form_FormClosing在 Form_FormClosing 中单击是时,C# 对话框不断弹出
【发布时间】:2019-11-12 05:08:26
【问题描述】:

在我的 C# winForms 中添加一个事件FormClosing,但添加代码Close() 后对话框不断弹出

 private void AdminPanel_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult result = (MessageBox.Show(this,
                                "Are you sure you want to close the Application?",
                                "Exit",
                                MessageBoxButtons.YesNo, MessageBoxIcon.Question));
        if (result == DialogResult.Yes)
        {
            //dialog keeps poping up when i try to close the form
            Close();
        }
        else {
            e.Cancel = true;
        }
    }

【问题讨论】:

  • 好的,所以这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。您真正的问题是“为什么关闭表单不会使我的应用程序进程停止运行?”?
  • 表单是应用程序的主表单吗?是否有线程或其他东西阻止应用程序关闭?
  • 如果你能分享一个minimal reproducible example(包括如何调用表单)那就太棒了,这样我们就可以在最后重现这个问题。
  • 我已经尝试了这两个答案,我还像@Olivier Rogier 所说的那样在formClosed 中添加了Environment.Exit(0);。并且正常工作。这解决了问题
  • Environment.Exit 肯定是一个有效的选项 - 但在 95% 的情况下,它的使用并不是最佳选择,因为这意味着您在其他地方犯了错误。如果您分享minimal reproducible example,我们可以确认这一点。

标签: c# winforms events


【解决方案1】:

您是否尝试过删除Close(); 电话?您已经在 Closing 事件处理程序中 - 除非您取消关闭,否则无论如何都会发生。

【讨论】:

  • 是的,它将关闭,但应用程序仍在运行。
【解决方案2】:

您不需要在FormClosing 中添加对Close 方法的调用,因为您已经处于Application 的表单关闭调用模式中。

你需要写:

private void AdminPanel_FormClosing(object sender, FormClosingEventArgs e)
{
  var result = MessageBox.Show(this,
                               "Are you sure you want to close the Application?",
                               "Exit",
                               MessageBoxButtons.YesNo, MessageBoxIcon.Question) );
  if ( result != DialogResult.Yes )
  {
    e.Cancel = true;
  }
}
  • 如果是DialogResult.Yes,那么它对e.Cancel 没有任何作用,并且关闭表单并调用FormClosed 事件。

  • 如果 e.Cancel 设置为 true,则应用程序管理器将取消 Close 调用,并且不会调用 FormClosed

如果您在FormClosing 中添加对Close 的调用,您将得到堆栈溢出:只要您单击Yes,框就会显示并显示并显示并显示并显示等等。除非你点击No...

如果你想强制应用程序结束你可以在FormClosed事件中使用:

Environment.Exit(0);

但也许你有什么地方阻止了关闭。

FormClosed 中有代码吗?它会抛出异常吗?否则你需要抓住它,因为它会停止关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多