这是个人学习中对事件的一点点初步理解,希望高手能指点一下!
事件:个人认为只有相当于控件的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函数即可
这是我写的一控件事件,其中的代码可能很烂也不实用,但是希望能通过它来理解事件即可;

写的很菜,如果大家,请多多指点!

|