C# 什么';打开新表单并关闭当前/第一个表单的建议方式是什么?

C# 什么';打开新表单并关闭当前/第一个表单的建议方式是什么?,c#,winforms,C#,Winforms,我正在构建一个具有初始登录表单的应用程序,如果用户获得授权,该表单(登录)应该关闭,应用程序主表单应该打开 我在检查SO,寻找有帮助的问题,我发现了很多相关的问题,但我不知道应该使用哪种技术,所以我在这里提问。打开新表单并关闭当前表单的推荐方法是什么 我看到一些人推荐OP来创建一个新的线程,还有一些人推荐使用“向导”(我不知道它是什么,但如果这是最好的方法,请给我一些资源来研究) 我试图通过关闭第一个和打开第二个来实现这一点,但是应用程序关闭了 这是指第一种形式 this.Close(); Fo

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

我在检查SO,寻找有帮助的问题,我发现了很多相关的问题,但我不知道应该使用哪种技术,所以我在这里提问。打开新表单并关闭当前表单的推荐方法是什么

我看到一些人推荐OP来创建一个新的线程,还有一些人推荐使用“向导”(我不知道它是什么,但如果这是最好的方法,请给我一些资源来研究)

我试图通过关闭第一个和打开第二个来实现这一点,但是应用程序关闭了

这是指第一种形式

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

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

如果用户获得授权,则应关闭此表单(登录),并打开应用程序主表单

第1、2和3号建议强烈声明不要这样做。将您自己的身份验证层添加到Windows已经提供的身份验证层绝不是一个错误。您将永远无法获得与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();

每个表单都没有自己的线程,只有一个共享UI线程。“想象”是这里的关键字。我不明白这个。在确认用户身份后,我想显示Frommain。但是我不明白“使用(var login=new LoginForm()){if(login.ShowDialog()!=DialogResult.OK)return;}”它做什么?我把form1改成了formmain,但它不工作,上面提到的代码是做什么的?我怎样才能解决这个问题?