关闭表单不会关闭应用程序



我的c#windows项目中有两个表单。第一种形式被称为";loginform";另一个被称为";主窗体"。我想点击按钮移动到主窗体,但当我到达主窗体时,问题是当我试图关闭我的第二个窗体时,它被命名为";主窗体";在这里,应用程序没有关闭,我不得不使用visualstudio来终止项目。下面是转到第二种形式的代码

this.Hide();
mainform mf = new mainform();
mf.Show();
我找到了答案。在第二个窗体上,为formclosed事件添加以下代码。
private void mainform_FormClosed(object sender, FormClosedEventArgs e)
{
Application.ExitThread();
}

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

this.Hide();

执行这行代码后,创建并显示mainform

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

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

显然,mainformthis一无所知,即……"创造"它的形式,但它确实需要this才能生存。如果我们"关闭"this,而this创建了mainform……那么mainform取决于this,并且在this关闭时也将关闭。

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

然后,一旦this关闭,mainform就会被杀死。所以这是行不通的。但是……如果您将Show更改为ShowDialog……对于mf.ShowDialog(),则它将工作,并且this将正确关闭。

因此,如果您想"关闭"创建"另一个表单的表单,那么您应该为mainform派生另一个进程,或者将this传递给mainform,并让它在完成后关闭它。我相信还有其他方法可以做到这一点,如果Application.ExitThread();。。。为你工作,然后去争取。

相关内容

  • 没有找到相关文章

最新更新