之前在窗体登录逻辑的实现 - hanzq_go - 博客园 (cnblogs.com)中写过一个窗体登录逻辑的实现。
这种方式是在应用程序的入口将登录窗体以showdialog的方式显示,如果返回DialogResult.OK,则将主窗体设置为启动页。
这里再介绍另外一种登录逻辑的实现,原理如下:
首先将登录窗体frmLogin作为启动页显示;
然后在登陆窗体代码中判断用户名和密码是否正确,如果正确显示主窗体同时隐藏登录窗体,如果不正确显示错误信息;
这里需要注意的是,如果登陆窗体为启动页,判断完用户名和密码后只能隐藏不能关闭,如果关闭则会退出整个应用程序。
实现代码如下:
using System; using System.Windows.Forms; namespace 窗体登录逻辑的实现2 { public partial class frmlogin : Form { public frmlogin() { InitializeComponent(); this.Load += Frmlogin_Load; } private void Frmlogin_Load(object sender, EventArgs e) { this.lblErroMsg.Visible = false; } private void btnLogin_Click(object sender, EventArgs e) { UserInfo userInfo = new UserInfo() { UserName = this.txtUserName.Text, Password = this.txtPassword.Text, }; if (userInfo.UserName == "admin" && userInfo.Password == "123456") { this.Hide();//登录页为启动页,不能关闭,只能隐藏 //首先判断frmMain是否已经存在 Form f = GetForm(typeof(frmMain).Name); if (f == null) { showForm<frmMain>(userInfo); } else { f.Tag = userInfo; f.Show(); } } else { this.lblErroMsg.Visible = true; this.lblErroMsg.Text = "用户名或密码错误!"; } } private void btnCancel_Click(object sender, EventArgs e) { Application.Exit(); } //从已打开窗体集合中找到指定的窗体 public Form GetForm(string formName) { Form form = null; foreach (Form item in Application.OpenForms)//判断应用程序中打开的窗体 { if (item.Name == formName) { form = item; break; } } return form; } //显示窗体 public void showForm<F>(object objData) { Form f = (Form)Activator.CreateInstance(typeof(F)); if (objData != null) { f.Tag = objData; } f.Show(); } } }
代码中增加两个方法,分别是:GetForm和showForm。
GetForm用于判断窗体是否存在,如果存在则返回该窗体,如果不存在则返回null;
showForm用于显示窗体,同时可以向显示的窗体的tag属性中传入参数。