【问题标题】:Application.Exit calls FormClose eventApplication.Exit 调用 FormClose 事件
【发布时间】:2013-09-26 10:07:42
【问题描述】:

我正在使用 .NET4.5 Winforms C#。

我的应用程序基于模型视图控制器模式。在主窗体(视图)上,我有一个按钮退出。如果用户按下此按钮,则在控制器上调用一个方法来清理内容,然后调用 Application.Exit()。这很好用。

我还想在用户按下右上角窗口中的默认窗口退出十字时运行此方法。为此,我处理 FormClosing 事件。在此事件中,我再次调用调用 Application.Exit();

的控制器方法

现在的问题是 Application.Exit() 也会触发 FormClosing 事件。这会产生双重呼叫。我当然可以为此做一个flag并进行测试,但是我觉得我做错了什么。

关闭我的 winforms 应用程序并清理所需内容的正确方法是什么。我不想在视图的formclosure事件中进行清理,看起来很难看。

【问题讨论】:

  • 有退出按钮关闭表单吗?

标签: c# winforms formclosing


【解决方案1】:

这样做的正确方法是将您的清理代码包含在您的FormClosing 事件处理程序中调用的方法中(在我看来,这并不难看)。调用Application.Exit 或以老式方式关闭应用程序会导致生成此事件。这会触发清理方法。

private void Clicked(object sender, EventArgs e)
{
  Application.Exit();
}

private void FormClosing(object sender, CancelEventArgs e)
{
  Cleanup();
}

private void Cleanup()
{
  // do cleanup here
}

【讨论】:

  • 但这意味着清理代码驻留在我的视图中?当然这很好用,但是清理代码(数据库访问、文件关闭等)不应该发生在控制器或模型中吗?我正在尝试使视图尽可能愚蠢,以便可以将其替换为任何其他 GUI 并进行更好的测试。
  • 我只想向我的控制器发送一个事件,然后从那里处理应用程序关闭...
  • 这就是您在 Cleanup 中要做的事情。
猜你喜欢
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2016-03-28
相关资源
最近更新 更多