如何关闭一个窗体而不关闭整个应用程序?

4
可能重复:
如何在不关闭应用程序的情况下关闭登录表单并显示主表单?

我该如何关闭第一个表单而不关闭整个应用程序?
以C#为例,如果我的第一个表单是登录表单,输入用户名和密码后,如果它们正确,该表单应该关闭,其他表单需要打开。

我尝试了this.close(),但我的整个应用程序退出了:(。之后我尝试了this.Hide(),它可以工作,但我的表单仍在运行,只是从UI中隐藏了。

谢谢


你不能这样做。不要将你的登录作为主要表单,而应将其作为次要表单。你可以打开它,获取凭据,然后像平常一样关闭它。 - Michael Todd
4个回答

9

这实际上很简单。在您的 Program.cs Main 静态方法中,使用以下代码启动您的 LoginForm。

var myLoginForm = new LoginForm();
myLoginForm.Show();
Application.Run();

然后在您的LoginForm中,记得在关闭它之前启动下一个表单,像这样:

var myNextForm = new NextForm();
myNextForm .Show();

this.Close();

如果您希望在登录失败后关闭应用程序,请按照以下步骤操作:
this.close();
Application.Exit();

希望这能帮到你!

0
在你的 Program.cs 文件中,你应该创建一个长时间运行的窗体实例,而不仅仅是登录窗体。
然后,你可以让其他窗体显示登录窗体以从用户那里获取信息,当它存在时,你将回到另一个窗体。

0

这是因为您正在关闭主应用程序的窗口。关闭该窗口将关闭整个应用程序。

现在,这里有一个解决方法:

  1. 创建第二个Form,例如LoginForm
  2. 在主窗体加载事件处理程序中(如果没有,请添加一个),显示LoginForm以要求用户输入其凭据。

一旦您检查了这些凭据,如果凭据正确,则可以从事件处理程序返回,此时主窗口将显示并且应用程序将正常运行,否则将关闭主窗口并关闭整个应用程序。


0

在处理表单时,您需要意识到调用 Application.Run() 只是将应用程序的主线程切换到表单的 UI 线程。当表单调用 Close() 时,它将完成所需的任何处理,并从 Application.Run() 调用继续执行。在此之后,如果登录表单的某个属性已设置 (frmLogin.LoginSuccessful 或类似),则可以在下一个表单上运行另一个 Application.Run()

然而,这不是最佳实践(依我之见)。相反,您应该从主表单中打开登录表单,然后在登录表单关闭后,主表单将继续运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接