窗体登录逻辑的实现2

之前在窗体登录逻辑的实现 - 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属性中传入参数。

窗体登录逻辑的实现

posted on   hanzq_go  阅读(50)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示