这是个人学习中对事件的一点点初步理解,希望高手能指点一下!
事件:个人认为只有相当于控件的object才可能有,所以,事件都是控件的一个属性。
先看一下msdn中的一段解释(这是给控件建立事件的一般步骤):
1.声明事件 若要在类内声明事件,首先必须声明该事件的委托类型(如果尚未声明的话)。
public delegate void ChangedEventHandler(object sender, EventArgs e);
委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
接下来,声明事件本身。
public event ChangedEventHandler Changed;
声明事件的方法与声明委托类型的字段类似,只是关键字 event 在事件声明前面,在修饰符后面。事件通常被声明为公共事件,但允许任意可访问修饰符。
2.调用事件 类声明了事件以后,可以就像处理所指示的委托类型的字段那样处理该事件。如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。因此,调用事件时通常先检查是否为空,然后再调用事件。
if (Changed != null)
Changed(this, e);
调用事件只能从声明该事件的类内进行。
3.与事件挂钩 从声明事件的类外看,事件像个字段,但对该字段的访问是非常受限制的。只可进行如下操作:
在该字段上撰写新的委托。
从字段(可能是复合字段)移除委托。
使用 += 和 -= 运算符完成此操作。为开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。
// Add "ListChanged" to the Changed event on "List":
List.Changed += new ChangedEventHandler(ListChanged);
当客户代码完成接收事件调用后,它将使用运算符 -= 从事件移除其委托。
// Detach the event and delete the list:
List.Changed -= new ChangedEventHandler(ListChanged);
对于其中第三个步骤个人认为这样理解更合适一点:
3.当外部使用该类(控件)的时候,只需给该类的事件属性赋上一个相应的值即可(委托类型,一般是EventHandler类型,并给委托一格处理函数,用+=或者-=操作)。
//当声明该控件后直接赋值就行了,不在需要什么Event等的事件声明
即List.Changed -= new ChangedEventHandler(ListChanged);//
然后完成ListChaged函数即可
这是我写的一控件事件,其中的代码可能很烂也不实用,但是希望能通过它来理解事件即可;
写的很菜,如果大家,请多多指点!