-----------------事件演示----------------

本文介绍如何创建自定义登录控件并实现不同场景下的登录验证。通过定义事件委托,可以灵活地在多个窗体中复用该控件,并根据实际需求定制验证逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《1》

在解决方案中添加一个windows窗体应用程序 取名为“事件演示” 然后添加一个“自定义控件”取名为UCLogin.cs  

一下是vs 项目图:



然后拖入两个lable 和两个TextBox,和一个Button 控件到这个UCLogin.cs自定义控件里  如图:


然后我们生成一下解决方案 ,这样就自制了一个用户自定义的用户登陆控件

既然它是一个自定义的用户登陆控件,那么在任何一个窗体中就可以拖入这个用户控件使用。可是不同的窗体在用户点击自定义登陆控件中的“登陆”的时候验证都有可能不一样,比如在这里窗体里,我通过连接数据库来验证登陆,而在另外一个窗体中,通过读取文件来验证.......等等。

于是我们想到在用户点击登陆的时候,我让她执行一个事件(委托)

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 事件演示
{
    public partial class UCLogin : UserControl
    {
        public UCLogin()
        {
            InitializeComponent();
        }

        //定义一个用户登陆校验事件 
        public event Action<object, UserLoginEventArgs> Loginvalidate;


        //当用户点击“登陆”的时候出发button1_Click这个事件,执行这个方法,然后再这个方法里去执行我们的Loginvalidate
        private void button1_Click(object sender, EventArgs e)
        {
            //---------------在这里执行用户登陆校验-----------------//
            
            //验证登陆
            if (Loginvalidate != null)
            {
                UserLoginEventArgs evtObj = new UserLoginEventArgs();
                evtObj.UserName = txtUserName.Text.Trim();
                evtObj.Passwrod = txtPassword.Text.Trim();
                evtObj.isOk = false;

                //----------执行Loginvalidate事件-----------//

                //this就是表示触发Loginvalidate这个事件的控件本身
                //例如:双击button按钮,触发了button1_Click事件,那么this就表示button按钮本身
                Loginvalidate(this, evtObj); //this表示触发事件的当前对象,即UCLogin这个自定义控件

                //这里就是表示如果用户登陆成功,执行什么操作。
                if (evtObj.isOk)
                {
                    this.BackColor = Color.Yellow; //如果登陆成功,将自定义登陆控件的背景色设为黄色
                }
                else
                {
                    this.BackColor = Color.Red; //如果登陆失败,就将自定义登陆控件的背景色设为红色
                }              
            }           
        }
    }
    /// <summary>
    /// 这个类的主页作用是将UCLogin这个控件对象的私有字段值传递给Form1窗体类
    /// </summary>
    public class UserLoginEventArgs:EventArgs
    {
        /// <summary>
        /// 登陆用户名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 登陆密码
        /// </summary>
        public string Passwrod { get; set; }

        /// <summary>
        /// 是否登陆成功
        /// </summary>
        public bool isOk { get; set; }
    }
}


好了,以上就把一个用户登陆的自定义控件设置好了。下面我们来看看怎么使用这个自定义用户登陆控件


我们打开From1窗体,在工具箱中的最上面,将我们的自定义用户登陆控件拖到我们的From1窗体中来,如下图:


双击一下From1窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 事件演示
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();//
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //ucLogin1.Loginvalidate += new Action(UserLoginValidate); 一般我们简写成下面的那样就可以了
            ucLogin1.Loginvalidate += UserLoginValidate;
            
            
        }
        //事件校验方法
        private void UserLoginValidate(object sender,UserLoginEventArgs e)
        {
            if (e.UserName == "张三" && e.Passwrod == "123456")
            {
                e.isOk = true;//如果用户名与密码都正确,就将isOk设置为true,表示登陆成功
            }
        }
    }
}

好了。大功告成 我们来运行一下这个程序吧!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值