.NET-17-事件|使用事件验证登录

事件

事件和委托的关系:事件就是在委托前面增加了关键字event,其他的和委托相似

委托在外部能赋值,能触发能调用,太灵活的使用但是导致不安全等问题

所以事件就出现了,事件只能在类的内部别调用,而在外部无法使用

事件不能使用null来赋值,只能+=或者-+来处理

事件在编译之后会被系统编译成两个公共方法和一个私有变量,以此保证事件无法在外界被直接调用

下面是一个委托和事件的练习

public class 事件
    {
        //事件是通过委托实现的,事件可以称为一个概念,他的本质是委托
        //委托才是事件能执行的核心


        #region   委托练习

        /// <summary>
        /// 把委托作为参数传递
        /// </summary>
        /// <param name="fun"></param>
        public static int M1(int n1, int n2, Func<int, int, int> fun)
        {
            //调用方式为
            //int r = 事件.M1(10, 20, ((x, y) => { return x + y; }));
            //Console.WriteLine(r);
            //Console.ReadKey();

            return fun(n1, n2);
        }

        /// <summary>
        /// 把委托当做返回值
        /// </summary>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        /// <returns></returns>
        public static Func<string, string, string> M2()
        {
            ////调用方式为
            //Func<string, string, string> fn = M2();
            //string r = fn("你", "好");
            //Console.WriteLine(r);
            //Console.ReadKey();

            return new Func<string, string, string>((x, y) => { return x + y; });
        }
        #endregion   委托练习

        #region    事件练习
        public static void ShiJian()
        {
            MyClass1 mysj = new MyClass1();
            mysj.MDSJ += mysj_MDSJ;
            mysj.Start("事件被触发了");
        }

        static void mysj_MDSJ(string obj)
        {
            Console.WriteLine(obj);
        }

        #endregion   事件练习
    }

    /// <summary>
    /// 把委托作为类中的一个属性的类型
    /// </summary>
    public class MyClass
    {
        //调用方式
        //MyClass my = new MyClass();
        //my.MD = () => { Console.WriteLine("这个委托里面啥都没有写。。。"); };
        //my.MD();
        //Console.ReadKey();

        public Action MD;
    }


    /// <summary>
    /// 事件
    /// </summary>
    public class MyClass1
    {
        public event Action<string> MDSJ;


        public void Start(string str)
        {
            if (MDSJ != null)
            {
                MDSJ(str);
            }
        }
    }

下面使用事件机制用用户控件来对登录验证做一个封装,并且根据不同的规则信息来验证登录是否成功

基本可以分为四步

1.创建一个自定义的类MyValidatingEventArges,用来保存需要验证的用户信息

在类中定义三个字段和属性,分表用来保存用户名,密码,验证是否成功三个信息

并且为了在初始化的时候传值,在里面定义了一个构造函数,用来对用户信息进行初始化

代码如下:

2.创建一个委托MyDelegate,用来传递需要验证的方法

该委托有两个参数,分别用来传递已经分装的用户控件本身和用户的登录信息

代码如下:

3.创建一个用户控件MYUserCounter,作为一个通用的登录验证控件

并且在用户控件中创建一个事件,用来保存需要验证的方法

界面如下:

代码如下:

4.生成之后可以在工具箱中看到刚才添加的用户控件,如下图

新增一个Windows窗体Form1,把用户控件拖进来,效果如下图:

在Load中添加验证的事件,并且书写自己的验证用户名和密码的信息,代码如下图:

代码写完,开始运行看测试效果

验证错误效果如下图:

验证正确效果如下图:

这里只是演示一下使用事件来验证登录的操作

很多细节并没有多做处理,比如密码是明文可以看到,验证成功与失败只是改变了颜色没有做其他操作

猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/81277144
今日推荐