C#学习笔记(35)——事件做的登录案例

说明(2018-4-9 20:11:42):

1. 先自定义了一个登录控件,可以输入账号、密码,点击登录。然后在Form1里面拖入这个控件,要求输入账号密码正确时,点击登录,控件显示绿色,否则显示红色。

2. 用事件来把控件里的账号和密码传值给Form1窗体,可以省略委托的定义过程那一行代码(public delegete void MyDel())直接用public event EventHandler MyEve。

3. 与委托的不同在于,事件里有两个参数(object sender, EventArgs e),sender用this就可以,e的话,要自己建一个类MyEventArgs,继承EventArgs,用它的属性来传递参数(账号、密码)。

4. 在Form1里的MyEve绑定的方法里,需要把e替换成mea,不然获取不到传过来的参数(账号、密码),MyEventArgs mea = e as MyEventArgs;就是这句代码。

5. 最后一点,如果是让把Form1整个窗体改变颜色,在Form1的绑定方法里直接this.BackColor赋值就可以了。如果是只让控件改变颜色,就需要返回一个bool值,让控件自己判断。例子中是给MyEventArgs类增加一个IsOK属性,并且初始值设为False,在Form1中判断登录成功的同时,讲IsOK的值设为True,在控件中改变颜色。

ucLogin.cs(控件代码):

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 _07事件做的登录案例
{
    public partial class ucLogin : UserControl
    {
        public ucLogin()
        {
            InitializeComponent();
        }
        //1.定义事件
        public event EventHandler MyEve;
        private void btnOK_Click(object sender, EventArgs e)
        {
            MyEventArgs mea = new MyEventArgs();
            mea.Name = txtName.Text;
            mea.Pwd = txtPwd.Text;
            //3.调用事件
            if (MyEve != null)
            {
                MyEve(this, mea);
            }
            if (mea.IsOK == true)
            {
                this.BackColor = Color.Green;
                MessageBox.Show("登录成功");
            }
            else
            {
                this.BackColor = Color.Red;
                MessageBox.Show("登录失败");
            }
        }

    }
    //声明一个MyEventArgs类存放账号、密码、是否登陆成功,三个参数
    public class MyEventArgs : EventArgs
    {
        //构造方法,使IsOK初始值为false
        public MyEventArgs()
        {
            IsOK = false;
        }
        public string Name { get; set; }
        public string Pwd { get; set; }
        public bool IsOK { get; set; }


    }
}

Form1.cs(主窗体代码):

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 _07事件做的登录案例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //2.绑定事件
            //两下tab键自动生成ucLogin1_MyEve方法
            ucLogin1.MyEve += ucLogin1_MyEve;
        }

        void ucLogin1_MyEve(object sender, EventArgs e)
        {
            //这句是最重要的,要把e强转为MyEventArgs类型!
            MyEventArgs mea = e as MyEventArgs;

            if (mea.Name == "123" && mea.Pwd == "123")
            {
                //这个是把整个Form1改变颜色,比较简单。现在的代码是把“是否登陆成功”的信息返回,改变控件的颜色。
                //this.BackColor = Color.Green;
                //MessageBox.Show("登录成功");
                mea.IsOK = true;
            }
            else
            {
                //this.BackColor = Color.Red;
                //MessageBox.Show("登录失败");
                //这个不用给IsOK赋值,默认就是false
            }
        }
    }
}

运行效果:

1. 登录失败:

 

 

2. 登陆成功:

总结:

1. 终于找到一个详细讲解事件这两个参数应用的视频了,21期->.net核心透析->2015.1.5基础加强,我觉得我快要悟道了^_^。

2. 再把窗体传值那个用事件实现一下。

 

原文地址:https://www.cnblogs.com/Jacklovely/p/8762746.html