打开新表单并关闭当前/第一个表单的推荐方法是什么?

我正在构建一个具有初始登录表单的应用程序,如果用户被授权,则该表单(登录)应该关闭,应用程序主表单应该打开。

我正在检查SO有用的问题,我发现了很多相关的问题,但我无法弄清楚应该使用哪种技术,所以我在这里问。 打开新表格并关闭当前的建议方法是什么?

我看到有些人建议OP创建一个新的线程,其他人建议使用“向导”(我不知道它是什么,但如果这是最好的方式,请给我一些资源来学习)。

我试图通过关闭第一个并打开第二个来完成它,但应用程序关闭。

this是指第一种forms。

 this.Close(); FormSecond f = new FormSecond(); f.Show(); 

如果用户被授权,则此表单(登录)应该关闭,应用程序主表单应该打开。

建议编号1,2和3强烈声明这样做。 将您自己的身份validation层添加到Windows已提供的身份validation层绝不是一个错误。 您永远不会像Windows登录那样安全且经过充分测试。 并且存在严重的安全风险,用户将重新使用他们的登录密码。 如果您需要除Environment.UserName之外的登录以及用户所属的组的任何额外信息,那么您可以从具有System.DirectoryServices命名空间的域控制器获取该信息。

但你会谨慎对待风。 样板解决方案是修改Program.cs中的Main()方法,并使用ShowDialog()显示登录表单。 当登录好时,哪个应该返回DialogResult.OK,如果不是,则返回DialogResult.Cancel。 你这样使用它:

  [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using (var login = new LoginForm()) { if (login.ShowDialog() != DialogResult.OK) return; } Application.Run(new Form1()); } 

这是你如何做到的:

 FormSecond f = new FormSecond(); f.Show(); this.Close(); 

如果您从登录表单开始并关闭它,则不再有任何线程可以运行。 所以(其中一个)解决方案是运行不同的初始表单并使该表单启动登录表单。 登录表单不再有用后,您可以关闭该表单并将控件返回到初始表单。 然后,您可以根据需要从初始表单中生成任何类型的表单。