说明(2018-4-9 20:11:42):this
1. 先自定义了一个登陆控件,能够输入帐号、密码,点击登陆。而后在Form1里面拖入这个控件,要求输入帐号密码正确时,点击登陆,控件显示绿色,不然显示红色。spa
2. 用事件来把控件里的帐号和密码传值给Form1窗体,能够省略委托的定义过程那一行代码(public delegete void MyDel())直接用public event EventHandler MyEve。.net
3. 与委托的不一样在于,事件里有两个参数(object sender, EventArgs e),sender用this就能够,e的话,要本身建一个类MyEventArgs,继承EventArgs,用它的属性来传递参数(帐号、密码)。code
4. 在Form1里的MyEve绑定的方法里,须要把e替换成mea,否则获取不到传过来的参数(帐号、密码),MyEventArgs mea = e as MyEventArgs;就是这句代码。orm
5. 最后一点,若是是让把Form1整个窗体改变颜色,在Form1的绑定方法里直接this.BackColor赋值就能够了。若是是只让控件改变颜色,就须要返回一个bool值,让控件本身判断。例子中是给MyEventArgs类增长一个IsOK属性,而且初始值设为False,在Form1中判断登陆成功的同时,讲IsOK的值设为True,在控件中改变颜色。视频
ucLogin.cs(控件代码):blog
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. 登陆失败:get
2. 登录成功:
总结:
1. 终于找到一个详细讲解事件这两个参数应用的视频了,21期->.net核心透析->2015.1.5基础增强,我以为我快要悟道了^_^。
2. 再把窗体传值那个用事件实现一下。