【问题标题】:Closing the form does not closing the Application关闭表单不会关闭应用程序
【发布时间】:2021-10-30 03:22:30
【问题描述】:

我的 c# windows 项目中有两个表单。第一种称为“loginform”,另一种称为“mainform”。我想在单击按钮时移至主窗体但是当我到达主窗体时,问题是当我尝试关闭此处名为“主窗体”的第二个窗体时,应用程序没有关闭,我必须使用 Visual Studio终止项目。下面是移动到第二种形式的代码

        this.Hide();
        mainform mf = new mainform();
        mf.Show();

【问题讨论】:

  • 在您有两个顶级的非模态表单中,任何一个都可以使应用程序保持打开状态。如果您希望其中任何一个关闭应用程序,请在某处跟踪两个表单实例并在每个表单正在关闭时调用一个方法(在 FormClosing 处理程序中)检查每个表单是否打开,如果是,则调用 Form.关闭它

标签: c# winforms


【解决方案1】:

我找到了答案。在第二个表单的 formclose 事件上添加以下代码。

 private void mainform_FormClosed(object sender, FormClosedEventArgs e)
    {
        Application.ExitThread();
    }

【讨论】:

  • 也许你能解释一下你的解决方案是什么?以防万一将来有人遇到同样的问题:)
【解决方案2】:

您遇到的问题是,当代码将其设置为“隐藏”时,“您的代码”基本上会“丢弃”任何对 this 的引用……

this.Hide();

这行代码执行后,mainform被创建并显示出来……

mainform mf = new mainform();
mf.Show();

假设上面的代码“之后”没有代码……那么基本上this 现在已经丢失了。用户看不到表单,也无法与之交互。显示了mainform……但它对this 一无所知。 this 现在丢失了,您无法找回它。这就是它一直运行的原因。

显然,mainform 不知道 this 即……“创建”它的表单,但它确实需要 this 才能保持活力。如果我们“关闭”thisthis 创建了 mainform... 那么 mainform 依赖于 this 并且在 this 关闭时也会关闭。

mainform mf = new mainform();
mf.Show();
this.Close();

然后,mainform 会在 this 关闭时被杀死。所以那是行不通的。但是...如果您将Show 更改为ShowDialog... 对于mf.ShowDialog(),那么它将起作用并且this 将正确关闭。

因此,如果您想“关闭”“创建”另一个表单的表单,那么您应该为mainform 分拆另一个进程或将this 传递给mainform 并让它在它关闭时关闭它已经完成了。我相信还有其他方法可以做到这一点,如果 Application.ExitThread(); ... 适合你,那就去吧。

【讨论】:

  • 你能分享一个链接吗??
  • 对不起,如果我遗漏了什么。我所描述的是否有部分不清楚?当你执行……this.Hide()……然后……用户看不到表单。如果没有一些“外部”机制来“取消隐藏”表单以便您可以正确关闭它......那么从那时起它基本上变得“无法访问”。这就是为什么你必须使用…Application.ExitThread();.
  • 我建议您将Show 更改为ShowDialog 并在最后一行添加this.Close();。我只是说,问题在于第一个表单没有关闭。至少使用这种方法,用户最终会关闭mainform,然后执行this.Close()
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多