事件
事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件
委托 delegate 相当于定义一个函数类型。
事件是建立在委托之上的 event 相当于定义一个 delegate 的函数指针(回调函数指针)
事件使对象或类 具备了通知,并执行其他类的方法的能力
原理:
如 当上课铃向时,学生进入教室, 老师开始上课
将其中的要素拆解
铃: 发布者
响铃 : 事件触发,发布消息
学生老师 :订阅者
进入教室和上课 :事件的执行函数
误区 代码要反着去理解
向上面讲的很容易理解 可对应到代码上就容易弄混
用 一个需求对应一下
子页面点击添加后刷新父页面
发布者 子页面
这里定义事件和委托,
当来到触发节点是 通知 所有的订阅者
这里的调用最好不要理解为普通函数的调用执行 而是理解为发布信息给所有订阅者
刷新列表页数据的委托
public event EventHandler ReloadList;
当来到触发节点是 通知 所有的订阅者
ReloadList(this, new MyEventArg {
query = PName.Text });
```csharp
订阅者 和订阅
父节点 和 事件执行函数的绑定
父类可以调用子类给子类 的事件附件执行的事件函数
而这要理解为 父类 订阅 子类的事件 父类约定子类事件发生时要做的事
比如 老师约定铃响要上课
在父类内部
childForm.ReloadList+= fatherFunc
事件函数 执行
定义在父类内部 要匹配委托的参数 接受事件参数 并不是一般的方法
private void LoadDocList(object sender, EventArgs e)
{
List<DocDetail> details;
MyEventArg myEventArg1 = e as MyEventArg;
details = documentBLL.GetProDocDetail(myEventArg1.query); gridControl1.DataSource = details;
}
因为订阅者可以有多个 ,有不同的执行方法 所以只要参数符合事件定义的委托 都i可以加在事件里执行