日期:2014-05-20  浏览次数:20913 次

类有有个事件,触发这个事件,如果引用这个类的代码里没有定义对应的事件处理函数,就报"未将对象引用设置到对象的实例"
做了个了个用户控件MyControl,到光标位置发生变化是抛出一个自定义事件
public   delegate   void   FocusChangeEventHandler();
public   static   event   FocusChangeEventHandler   FocusChange;

在这个控件中抛出事件的代码是这么写的
FocusChange();

如果客户代码里注册了处理这个事件的函数:
MyControl.FocusChange   +=   new   MyControl.FocusChangeEventHandler(Class1_FocusChange);
就没问题.但如果没有上面这行,我的控件在抛出事件的那行就会产生异常“未将对象引用设置到对象的实例”。于是我不得不在我的控件里抛出事件的地方写成
try
{
      FocusChange();
}
catch(Exption   ex){}

可这看着很别扭那,而且.net没必要这么做啊。是我写的有问题还是.net就是这个样子的?
感激涕零!



------解决方案--------------------
MyControl.FocusChange += new MyControl.FocusChangeEventHandler(Class1_FocusChange);
是必须的,因为上面这句相当于new了一个实例,
一般情况下你可以这样写
if( FocusChange != null )
FocusChange.invoke();