[英]Two different windows forms in C#
我是C#和.NET编程的新手。 我想设计一个使用小登录屏幕打开的应用程序,当用户按下“登录”按钮时,我的程序应该关闭登录表单并传递给新表单。 我怎样才能实现这个简单的过程?
谢谢。
这可能是一个解决方案;
在LoginForm中;
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方法中,您可以使用模式对话框来执行登录。 即
//--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。 必须手动处理模型对话框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.