• 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. 再把窗体传值那个用事件实现一下。

     

  • 相关阅读:
    bzoj3272 Zgg吃东西
    bzoj3894 文理分科
    poj1149 PIGS
    poj1637 Sightseeing tour
    [Wc2007]剪刀石头布
    poj2396 Budget
    [NOI2017]游戏
    CF666E Forensic Examination
    bzoj4889 [Tjoi2017]不勤劳的图书管理员
    CF587F Duff is Mad
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8762746.html
Copyright © 2020-2023  润新知