【问题标题】:How to close the app when I make click on X button in a child form?当我在子窗体中单击 X 按钮时如何关闭应用程序?
【发布时间】:2015-10-13 06:34:54
【问题描述】:

我有一个包含两个表单的表单应用程序。在第二种形式中,我在右上角有x 按钮。当我单击此按钮关闭应用程序时,我该怎么做,而不仅仅是隐藏 Form2 窗口?

【问题讨论】:

  • 尝试使用 FormClosingEventArgs。示例在本文中:stackoverflow.com/a/2683716/5189896
  • 最简单的解决方案 - 使用FormClosing 事件并将Application.Exit() 放入其中。
  • 使用 Environment.Exit(0);

标签: c# winforms multiple-forms


【解决方案1】:

首先你需要捕捉事件。为此,请在子窗体的 FormClosing 事件上设置一个事件处理程序。

那么有几种选择:

  1. 使用Process.Kill()“蛮力”终止。
    这将终止进程而不让任何清理代码运行。它的效果类似于通过任务管理器结束进程。您可以通过Process.GetCurrentProcess 获取当前进程。像这样使用:

    Process.GetCurrentProcess().Kill();
    
  2. 通过使用Application.Exit()关闭所有窗口来“温和”终止。
    这将关闭所有消息泵和窗口,但会在允许正常清理代码运行的同时这样做。但是,它不保证进程会被终止,例如,如果在消息循环完成后一个 forgound 线程仍然处于活动状态。像这样使用:

    Application.Exit();
    
  3. 向主线程传达意图。
    这是一个设计解决方案,而不是你放在某个地方的“代码行”。这个想法是 2 个类(2 个表单)具有某种通信机制(通过消息、事件或您认为合适并且可能已经使用的任何内容),并且子表单通知父表单用户希望退出应用程序。然后由主窗体清理所有内容,关闭所有窗体(自身和其他窗体),并正常退出进程。这是最简洁和首选的方法,但需要适当的设计和更多的代码。

【讨论】:

  • 我使用了这个私有 void Form2_FormClosed(object sender, FormClosedEventArgs e) { Process.GetCurrentProcess().Kill(); },但不起作用
  • @user - 事件处理程序是否正在执行? (使用调试器验证)
  • 当我进行调试时..当我点击 X 时不要进入这个方法
  • 方法是否附加到事件中(form2.FormClosed += Form2_FormClosed; 什么的)?
  • no .. 我需要把这个放在 Initialize Component() 之后?
【解决方案2】:

如果你使用的是表单,最简单的是使用

this.Close(); or  Application.Exit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 2019-10-07
    • 2023-03-04
    • 2012-11-16
    • 2020-04-13
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多