------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
今天看到论坛上一个朋友对事件的参数有迷惑,就写了一个例子说明一下,顺便给自己加深一下印象~~ namespace _07自己定义一个登录控件 { //第一步,定义一个用来实现事件的委托 public delegate void UserLoginDelegate(object sender, UserLoginEventArgs e); public partial class ucLogin : UserControl { public ucLogin() { InitializeComponent(); } //第二步,根据定义好的委托,在要使用事件的类中定义事件变量 public event UserLoginDelegate UserLogin; //登录按钮的单击事件 private void button1_Click(object sender, EventArgs e) { string uid = txtUid.Text.Trim(); string pwd = txtPwd.Text.Trim(); //第三步,根据需求在适当的时候触发事件:登录成功与不成功时,窗口的不同显示,用来直观感受 UserLoginEventArgs evt = new UserLoginEventArgs(uid, pwd); if (this.UserLogin != null) { UserLogin(this, evt); } if (evt.IsOK) { this.BackColor = Color.Green; } else { this.BackColor = Color.Red; } } } public class UserLoginEventArgs { public UserLoginEventArgs(string uid, string pwd) { this.UserId = uid; this.UserPassword = pwd; this.IsOK = false; } //定义用户名属性UserId public string UserId { get; set; } //定义用户登录密码属性UserPassWord属性 public string UserPassword { get; set; } //用来判断登录成功与否 public bool IsOK { get; set; } } } file:///C:/Users/Administrator/AppData/Local/youdao/ynote/images/5A7BB817F64B41638B60F6530E5852EA/7C47CC69ECBB4E939916085A70C1950E.jpg private void Form1_Load(object sender, EventArgs e) { //为用户控件注册一个“登录”事件 this.ucLogin1.UserLogin += new UserLoginDelegate(ucLogin1_UserLogin); } //当用户登录时,触发,执行该代码 void ucLogin1_UserLogin(object sender, UserLoginEventArgs e) { if (e.UserId == "admin" && e.UserPassword == "888") { e.IsOK = true; } } ---------------------------------------------------------------------------------------------------------------------------------------------------------- 第一步:看这个委托定义,第一个参数传了一个object对象,来代表谁调用的,第二个参数传的是“我们需要用到的参数” object sender: { 为什么定义这两个参数: 1.object类是所有类的基类,也就是说,我可以在知道自己传的是个什么的时候,显式的转换成要操作的类<挺绕的,下文详细说明> 2.这是微软提倡的规范,没办法,人家是老大~ ![]() } UserLoginEventArgs e: 这个是自己定义的类,用于保存要传的参数值,(其实我建议还是从 EventArgs 派生好,符合规范嘛) 这样 上面那个委托传的 UserLoginEventArgs e ,就可以用e.UserId取值啦~~ 第二步:定义一个事件,其实事件也就是个委托而已 这样,我们就可以往事件中添加要处理的方法啦~~~ 然后别忘记,要在需要的时候,调用这个委托!!! 第三步,看看这个按钮的点击事件: 然后,就是+=,调用啦: -------------------------------------------------------------------------------------------------------------------------------------------------------------- Ps: 很多事件都是(object sender, EventArgs e)这个样子,第一个参数,代表是哪个对象传的,第二个参数,是要使用的附加参数(可以从EventArgs派生一个类,因为EventArgs里没有成员可以添加我们想要用的参数信息) 假设现有这么两个类: 定义一个事件: 再写一个方法: 这样,我调用这个委托,把People的对象传进去,然后再强制转换一下(因为我知道,我传的就是People类型),就可以访问People的对象啦~~ |