-1

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

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

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

我试图通过关闭第一个并打开第二个来做到这一点,但应用程序关闭了。

this指的是第一种形式。

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

3 回答 3

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());
    }
于 2013-04-21T19:48:12.130 回答
-1

这就是你的做法:

FormSecond f = new FormSecond();
f.Show();
this.Close();
于 2013-04-21T19:48:31.397 回答
-2

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

于 2013-04-21T19:24:00.663 回答