我是 C# 和 .NET 编程的新手。我想设计一个打开一个小的登录屏幕的应用程序,当用户按下“登录”按钮时,我的程序应该关闭登录表单并传递给一个新表单。我怎样才能实现这个简单的过程?
谢谢。
这可能是一个解决方案;
在登录表单中;
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());
}
}
根据应用程序的整体架构,我经常喜欢让主表单控制启动登录屏幕。
//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;
}
}
这里的挑战是传递给 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();
}
}
}
如果您确实使用了 .ShowDialog(),请不要忘记将其包裹在 using 块中,或者在完成后在登录表单上使用 .Dispose。模型对话框必须手动处理。