By Charles | 2924 views | 2008/05/06
首先在控件中放置一个System.EventHandler,然后在应该产生事件的地方直接向EventHandler传递参数即可。
这个东西,我还是按照自己的理解来描述一下。就是等于说在你的对象里面放一个函数指针,这个指针指向某个函数,你还不知道,当对象被创建了,处理事件的那个函数也在程序的其他某个地方被创建了,并且赋值给了这个函数指针的时候,通过这个函数指针,你就可以调用那个时间处理函数了,看起来,就好像发生了事件一样。
所以,事实上你在创建这个函数指针的时候,并不知道这个指针是否肯定要被赋值,也有可能永远不会被赋值。所以,每次调用的时候,应该判断是否已经被赋值。
这就让我想起了以前我在天津的时候,那种住宅楼都有一条专门走垃圾的管道,想让你们家支持扔垃圾这个事件,就要把垃圾管道通道家里,但是你并不知道管道的那一头是不是连接着垃圾箱,或者垃圾箱还没有建好,所以,你必须在扔垃圾前确认一下,当你发现楼下的垃圾箱完好的时候,你在家里,当你需要扔垃圾的时候,你只要打开管道的门,把垃圾袋放进管道里面,就O.K.了,楼下的垃圾箱就会收到一袋垃圾,然后会有专人处理垃圾箱的。
你在扔垃圾前也可以不去确认,那么结果就很糟糕,你知道的,可能当你走到楼下的时候,一转弯,发现一大堆很臭的垃圾,而那恰恰是你自己扔的。嘿嘿……
<br /> public class ListWithChangedEvent : System.Collections.ArrayList <br /> { <br /> // 垃圾管道通进家了 <br /> public event System.EventHandler Changed; <br /> <br /> // 该扔垃圾的时候调用这个 <br /> protected virtual void OnChanged(System.EventArgs e) <br /> { <br /> if (Changed != null) //确认一下另一头是不是有个垃圾箱 <br /> { <br /> Changed(this, e); <br /> } <br /> } <br /> <br /> // 瞧,现在该扔了,所以,只要扔就可以了 <br /> public override int Add(object value) <br /> { <br /> int i = base.Add(value); <br /> OnChanged(System.EventArgs.Empty); <br /> return i; <br /> } <br /> //以下省略 <br />
Posted in 工作相关 | Tagged DIY, dotNet, programming |
Most Commented Posts