【问题标题】:close windows form works on a form but not on another one关闭窗口表单适用于一个表单,但不适用于另一个表单
【发布时间】:2014-07-24 11:50:58
【问题描述】:

我已经创建了一个 Windows 窗体应用程序。

VS2012 为我创建了一个form1 表单

然后我创建了第二个表单,名为 Main

form1 表单上有一个按钮可以转到Main 表单

当我使用 vs2012 运行应用程序时,然后单击表单 form1 右上角的 x 按钮,表单关闭,我可以开始使用 vs。但问题是当我点击表单Main右上角的x按钮时,我无法开始使用VS,但我需要点击vs中的Stop Debugging红色按钮才能能够输入 vs.

所以我的问题是当我将此应用程序提供给我的客户时,当单击表单右上角的 x 按钮时,我需要完全关闭应用程序,我不需要他们去任务管理器并从中关闭应用程序。

【问题讨论】:

  • 那是因为 Main 仍在运行...它 ** 拥有 ** form1 通过事物的声音。因此,您需要正确管理应用程序的生命周期并在应用程序退出之前关闭所有表单。
  • 程序运行直到应用程序被Application.Exit();停止或Program.cs文件中启动的表单关闭。其他形式无所谓。
  • 请提供一些示例代码来展示您程序中的逻辑流程。
  • @Belogix 感谢您的描述。我明白了
  • @TaW 感谢您的描述。

标签: c# winforms forms visual-studio-2012


【解决方案1】:

您的应用程序以Form 1 开头,当您关闭它时,您将关闭该应用程序。 Main 只是一个表单,当您关闭它时,您正在关闭表单。你需要做的是,去Main表单的FormClosing事件并添加

Application.Exit();

【讨论】:

  • 您的解决方案完美运行。但是另一个人告诉我使用System.Envirenement.Exiit(0) 哪个更好?抱歉,我没有足够的声望,无法为你 +1
  • System.Envirenement.Exit(0);与您的应用程序相关的所有内容都意味着您的应用程序打开但关闭的任何内容都会处理;)
  • @Youness 那是一种痛苦,请告诉我什么是好的。我只需要关闭应用程序。应用程序写入一些 csv 文件
  • @AgnieszkaPolec 我认为这不会对您的应用程序产生影响。您的问题取决于程序。你可以只是我给的代码。
【解决方案2】:

进入 FormClosing 事件并输入以下代码:

System.Envirenement.Exit(0);

【讨论】:

  • 那在哪里? vs 中的属性?
  • 它是一个事件,当一个 jsut 选择您的表单并进入 proprietes 选项卡并单击事件(黄色的 thender ;) )那里寻找 FormClosing 双击它附近的空字段并添加一个方法把这段代码写进去
  • 不要那样做。这是一个硬退出,需要特殊的权利。查看文档!
【解决方案3】:

问题是因为您的Form1 表单仍在运行(隐藏)。
如果您仅使用 Form1 打开您的 Main 表单。然后删除Form1 并在您的项目属性中将Main 设置为启动表单:
Application -> StartUp form

在此之后当您关闭Main 表单应用程序将正确关闭

如果您使用Form1,那么您也需要在关闭Main 表单后关闭Form1
为此目的使用FormClosed eventhandler

【讨论】:

    【解决方案4】:

    当你转到Main 时,你对form1 做了什么?如果你只是为了显示另一个而隐藏它,然后关闭另一个,同时保持 form1 隐藏,那么 form1 自然仍然会运行,即使 Main 已关闭。

    听起来合乎逻辑的做法是在关闭后者时从 Main 返回到 form1 - 否则,您可以在适当的事件上使用 Application.Exit(0) 关闭两者。

    在任何一种情况下,如果您提供了一些实际代码,就会更容易回答这个问题。

    更新:

    您也可以使用System.Environment.Exit(0),但这可能需要更多权限,这可能会或可能不会影响您的情况。再说一遍 - 一些代码会很有帮助。

    关于您的 cmets,请参阅 this answer for more info 了解终止选项。

    【讨论】:

    • 感谢您的回答。但我应该使用System.Envirenement.Exit(0) 还是Application.Exit();
    • 我相信dispose 只会关闭窗口 - 不确定,但它可能不会完全停止应用程序(测试它,看看会发生什么!)。 Application.Exit() 应该没问题;它应该像你想要的那样停止你的程序。另外,请参阅我的更新 - 这已经在 SO 上得到了很好的回答。
    • 我的荣幸! PS:如果它解决了您的问题,请随意投票或将答案标记为您的“已接受答案”;)
    • 对不起,我无法投票,因为我没有足够的声誉。另外,我不得不接受第一个正确答案。我希望我能接受更多。非常感谢您的努力
    【解决方案5】:

    右键单击表单->属性
    Event 选项卡上选择 FormClosing 事件
    并写下这段代码

    private void Main_FormClosing(object sender, FormClosingEventArgs e)
            {
               System.Environment.Exit(0);
            }
    

    【讨论】:

      猜你喜欢
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多