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

时间:2013-04-21 19:12:48

标签: c# winforms

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

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

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

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

this指的是第一种形式。

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

3 个答案:

答案 0 :(得分:4)

  

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

建议编号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());
    }

答案 1 :(得分:-1)

您就是这样做的:

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

答案 2 :(得分:-2)

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