【问题标题】:c# Application exits when Main form closesc#主窗体关闭时应用程序退出
【发布时间】:2013-07-30 17:15:53
【问题描述】:

我正在编写一个多表单应用程序,我希望能够在不关闭应用程序的情况下关闭 Form1。
现在我正在使用this.Hide 来隐藏表单。有没有办法设置它以便我可以关闭任何表单,或者应用程序应该只在所有表单都关闭时才存在?

我想我记得有一次看到过类似的东西,但那可能不是 Visual Studio 和 C#。

【问题讨论】:

  • 看看Program.cs。第 3 行使用的表单是您的“根”表单,当此表单关闭时,程序将关闭。因为在运行表单后程序无事可做,所以它关闭了。关闭表单后你希望程序做什么?

标签: c# winforms hide exit


【解决方案1】:

在您的Program.cs 文件中,您有类似Application.Run(new Form1()) 的行。替换为

var main_form = new Form1();
main_form.Show();
Application.Run();

您还需要通过调用Application.Exit() 来显式关闭应用程序。

【讨论】:

  • 谢谢!它有效,但我必须这样做:var main_form = new Form1();main_form.Show();Application.Run();,否则它只是启动时没有显示任何表单。再次感谢!
  • 是的,忘记了。将其添加到答案中。
【解决方案2】:

一种策略是执行以下操作:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    if (Application.OpenForms.Count == 0)
        Application.Exit();
    }
}

如果您将其放在所有表单上,当最后一个表单关闭时,应用程序将退出。

【讨论】:

  • 第 5 行多了一个}
【解决方案3】:

一个多格式应用程序应该有一个明确的退出选项(通过菜单、工具栏),因为您无法知道用户在最后一个窗口关闭时想要关闭程序(我假设用户可以转到文件/打开和打开新窗口)

自动执行用户未要求的操作的应用程序可能会感到沮丧/困惑,并花时间重新打开应用程序。

甚至用户也可以认为应用程序由于他没有关闭它而以某种方式崩溃。

【讨论】:

  • 谢谢,这是一些很好的知识。我实际上确保让我的应用程序用户友好,我通常不会限制他们调整窗口大小和类似内容的能力,但这是一个线性应用程序,它具有特定的流程。当用户单击下一个按钮时,我希望它转到下一个表单并关闭前一个。我可以隐藏它,但我不想将 CPU 时间浪费在用户再也看不到的不可见表单上。
  • 用户也将有机会在每个表单上退出应用程序。
  • @WolfyD 如果它是一个单一的流程,为什么不使用 BACK、NEXT、CANCEL 按钮实现典型的向导界面?达到所需状态时,NEXT 按钮变为 FINISH
【解决方案4】:

根据您的意见,这是一种单一流程的应用程序

我建议您使用 BACK、NEXT、CANCEL 按钮在单个表单上实现典型的向导界面

当达到所需状态时,例如已收集到足够的信息,NEXT 按钮将更改为 FINISH 按钮。

只要用户按下取消/完成按钮,窗口就会关闭

如果您仍然想要多表单,您仍然可以拥有它,在这种情况下,您可以同时拥有多个流程,然后完成或取消您想要的流程。

【讨论】:

  • 是的,我确实想到了这一点,但是由于每个表单都需要不同的控件和信息,因此设置起来会非常忙碌,但我以这样一种方式解决了这个问题,即当用户启动时应用程序继续工作的下一个表单,当用户想要使用 [x]、任务管理器或退出按钮关闭表单时,它会关闭整个应用程序,因此不会造成混淆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多