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