【问题标题】:How I can close a 1st form without closing the full application? [duplicate]如何在不关闭完整应用程序的情况下关闭第一个表单? [复制]
【发布时间】:2012-03-09 18:23:58
【问题描述】:

可能重复:
How can I close a login form and show the main form without my application closing?

如何在不完全关闭应用程序的情况下关闭第一个表单?
C#。例如,如果我的第一个表单是在输入用户名和密码后记录表单,如果它们正确,则该表单应该关闭,而其他表单需要打开。

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

ty

【问题讨论】:

  • 你不能。不要将您的登录名用作主要形式,将其用作次要形式。您可以打开它,获取凭据,然后像往常一样关闭它。

标签: c#


【解决方案1】:

其实很简单。在您的 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();

希望对你有帮助!

【讨论】:

    【解决方案2】:

    在您的 Program.cs 中,您应该让它创建一个您希望长期运行的表单实例,而不仅仅是登录表单。

    然后您可以让另一个表单显示登录表单以从用户那里获取该信息,当它存在时,您将返回到您的另一个表单。

    【讨论】:

      【解决方案3】:

      那是因为您要关闭的窗口是主应用程序的窗口。关闭该窗口将关闭整个应用程序。

      现在是修复:

      1. 例如创建第二个FormLoginForm
      2. 在主表单加载事件处理程序(如果没有,添加一个),显示LoginForm 要求用户输入他/她的凭据。

      检查完这些凭据后,如果凭据正确,您可以从事件处理程序返回,在这种情况下,主窗口将显示,应用程序将正常运行,或者关闭主窗口,整个应用程序将关闭。

      【讨论】:

        【解决方案4】:

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

        但是,这不是最佳做法 (IMO)。您应该做的是从主表单中打开登录表单,然后在登录表单关闭后主表单将继续运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-28
          • 2013-03-13
          • 1970-01-01
          • 2017-07-29
          • 2014-07-30
          • 2022-11-20
          相关资源
          最近更新 更多