说明(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 == "" && mea.Pwd == "")
{
//这个是把整个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. 再把窗体传值那个用事件实现一下。

C#学习笔记(35)——事件做的登录案例的更多相关文章

  1. Hadoop学习笔记(8) ——实战 做个倒排索引

    Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...

  2. 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

    学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...

  3. Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

    Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...

  4. iOS学习笔记--触摸事件

    最近空闲时间在学习iOS相关知识,几周没有更新文章了,今天总结下这些天的学习内容,也整理下iOS的学习笔记,以便以后查阅翻看- iOS中的事件可以分为3大类型: 触摸事件 加速计事件 远程控制事件 响 ...

  5. [JS学习笔记]Javascript事件阶段:捕获、目标、冒泡

    当你在浏览器上点击一个按钮时,点击的事件不仅仅发生在按钮上,同时点击的还有这个按钮的容器元素,甚至也点击了整个页面. 事件流 事件流描述了从页面接收事件的顺序,但在浏览器发展到第四代时,浏览器开发团队 ...

  6. [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  8. JavaScript高级程序设计学习笔记之事件

    1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...

  9. ADO.NET学习系列(三)----做一个登录案例

    总体思路.根据用户输入的用户名和密码,来判断,和数据库里面存的是不是一样,如果一样就表明登录成功,否则就登录失败. 方案一: 1.select* from 表名 where username=&quo ...

随机推荐

  1. nodejs EventEmitter 发送消息

    var util = require('util'); var evem = require('events').EventEmitter; function myem(){ evem.call(th ...

  2. Usaco 4.3.1 Buy Low, Buy Lower 逢低吸纳详细解题报告

    问题描述: "逢低吸纳"是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀:  "逢低吸纳,越低越买"  这句话的意思是:每次你购买股票时的股 ...

  3. centos 7 之nginx

    环境信息 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -r -. ...

  4. migrate数据库迁移

    可先参看博友的博文:https://segmentfault.com/a/1190000005599416 由于Yii migrate 生成的迁移文件默认是存放在 console/migrations ...

  5. 2018-8-16JWTtoken用户登录认证思路分析9502751

    2018-8-16JWTtoken用户登录认证思路分析9502751 JWT token在商城中的实现 class UserView(CreateAPIView): serializer_class ...

  6. 【动态规划】Column Addition @ICPC2017Tehran/upcexam5434

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 A multi-digit column addition is a formula on adding two integers writ ...

  7. 【组合数】微信群 @upcexam6016

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 众所周知,一个有着6个人的宿舍可以有7个微信群(^_^,别问我我也不知道为什么),然而事实上这个数字可以更大,因为每3个或者是更多的人都可以 ...

  8. pygame-KidsCanCode系列jumpy-part13-改进跳跃

    这节研究下跳跃如何做得更自然,先看看之前的跳跃有什么问题,我们把settings.py里的初始化参数调整下: # starting platform # PLATFORM_LIST = [(5, HE ...

  9. 前端工程化系列[03]-Grunt构建工具的运转机制

    在前端工程化系列[02]-Grunt构建工具的基本使用这篇文章中,已经对Grunt做了简单的介绍,此外,我们还知道了该如何来安装Grunt环境,以及使用一些常见的插件了,这篇文章主要介绍Grunt的核 ...

  10. 枚举进行位运算 枚举组合z

    枚举进行位运算--枚举组合 public enum MyEnum { MyEnum1 = , //0x1 MyEnum2 = << , //0x2 MyEnum3 = << , ...