2

我是 C# 和 .NET 编程的新手。我想设计一个打开一个小的登录屏幕的应用程序,当用户按下“登录”按钮时,我的程序应该关闭登录表单并传递给一个新表单。我怎样才能实现这个简单的过程?

谢谢。

4

4 回答 4

9

这可能是一个解决方案;

在登录表单中;

public bool IsLoggedIn { get; private set;}
public void LoginButton_Click(object sender, EventArgs e)
{
  IsLoggedIn = DoLogin();
  if(IsLoggedIn)
  {
    this.Close()
  }
  else
  {
    DoSomethingElse();
  }
}

在 program.cs 中

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  LoginForm loginForm = new LoginForm();
  Application.Run(loginForm);
  if (loginForm.IsLoggedIn)
  {
    Application.Run(new OtherForm());
  }
}
于 2008-12-25T14:48:25.517 回答
2

根据应用程序的整体架构,我经常喜欢让主表单控制启动登录屏幕。

    //Program.cs:
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }

    //MainForm.cs
    private void MainForm_Load(object sender, EventArgs e)
    {
        this.Hide();
        Login login = new Login();
        if (login.ShowDialog() == DialogResult.OK)
        {
            //make assignments from login
            currentUser = login.User;
        }
        else
        {
            //take needed action
            Application.Exit();
            return;
        }
    }
于 2008-12-25T15:43:55.093 回答
0

这里的挑战是传递给 Application.Run() 方法的形式。如果您使用登录表单的实例启动应用程序,然后关闭该表单,我相信应用程序将退出。毫无疑问,有几种方法可以处理这个......

一种方法是将主表单的实例传递给 Application.Run 方法(这会将消息循环与该表单实例而非登录表单联系起来)。在主窗体的 OnLoad 方法中,您可以使用模式对话框来执行登录。IE

//--Main form's OnLoad method
protected override void OnLoad(EventArgs ea)
{
    // Remember to call base implementation
    base.OnLoad(ea);

    using( frmLogin frm = new frmLogin() )
    {
        if( frm.ShowDialog() != DialogResult.OK )
        {
            //--login failed - exit the application
            Application.Exit();
        }
    }       
}
于 2008-12-25T15:04:32.160 回答
0

如果您确实使用了 .ShowDialog(),请不要忘记将其包裹在 using 块中,或者在完成后在登录表单上使用 .Dispose。模型对话框必须手动处理。

于 2008-12-26T18:23:52.210 回答