如何在不关闭完整申请的情况下关闭第一张表格?

时间:2012-03-09 18:23:59

标签: c#

  

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

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

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

TY

4 个答案:

答案 0 :(得分:7)

实际上非常简单。在Program.cs上,主静态方法使用以下代码启动LoginForm。

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

然后从您的LoginForm中,只需记住在关闭它之前启动您的下一个表单:

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

this.Close();

如果您只想在登录失败后关闭应用程序,请执行以下操作:

this.close();
Application.Exit();

希望它有所帮助!

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

现在是修复:

  1. 创建第二个FormLoginForm例如
  2. 在主窗体加载事件处理程序中(如果没有,则添加一个),显示LoginForm以要求用户输入他/她的凭据。
  3. 检查这些凭据后,如果凭据良好,您可以从事件处理程序返回,在这种情况下,主窗口将显示,应用程序将正常运行或关闭主窗口,整个应用程序将关闭。

答案 3 :(得分:0)

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

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