0
   Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form_Login());

登录后我想将登录后显示的新表单作为主表单并关闭当前表单

我试过了

This.Hide();

它只是隐藏了表单,但它仍在任务管理器上运行

我试过了

This.Close();

它关闭了整个应用程序,因为 Form_Login 是主窗体

4

1 回答 1

2

DialogResult在关闭 Form1 时返回 a 。使用该值Main()来确定是否应该打开 Form2。像这样的东西。

在 Form1 中,可能在按钮单击处理程序中:

this.DialogResult = DialogResult.OK;
this.Close();

在 Program.cs 中:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form1 = new Form1();
Application.Run(form1);

if (form1.DialogResult == DialogResult.OK) {
    Application.Run(new Form2());
}

如果您的 Form1 关闭而不将其设置DialogResultDialogResult.OK,您的应用程序将退出。如果您的 Form1 关闭并将其DialogResult设置为,DialogResult.OK则 Form2 将打开。


编辑:使用这种技术进行简单的登录

这是一种方法。

创建一个描述登录屏幕结果的枚举:

public enum LogonStatus { NoLogon, UserA, UserB };

在您的登录屏幕上创建一个属性来存储登录结果:

public LoggedOnUser User { get; private set; }

在登录表单中为登录操作赋值并关闭表单:

LogonResult = LogonStatus.UserA;  // UserA logged in, for example.
this.Close();

在 Main 中运行 Logon 表单,检查表单的LogonResult属性并处理结果:

static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    var loginForm = new Form_Login();
    Application.Run(loginForm);

    if (loginForm.LogonResult == LogonStatus.NoLogon) {
        // Do something because there was no logon, or do nothing here and let your app exit.

    } else {
        // Launch your application form, passing in the logged on user.
        Application.Run(new AppForm(loginForm.LogonResult));
    }
}

此示例显示将 a 传递LogonStatus给您AppForm的构造函数,以允许您在用户登录时对其进行定制。

尽管如此,您应该知道这并不是最好的方法。更灵活、更强大的解决方案将涉及利用 Windows 目录服务。

于 2013-07-22T23:09:14.917 回答