首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

自定义消息,如其没有消息处理函数,为什么不行呢

2013-08-09 
自定义消息,如果没有消息处理函数,为什么不行呢?比如自定义个消息和委托public delegate void EventHandle

自定义消息,如果没有消息处理函数,为什么不行呢?
比如自定义个消息和委托
public delegate void EventHandler( object sender , EventArgs e );
public event EventHandler Click;

然后在某个函数内触发Click消息,结果产生异常,object reference not set之类。
查看了下,估计是因为Click为空。

但是我的想法是,程序刚执行时,先不处理这个消息,也就是任由他产生。然后某种情况下,为其添加个委托,如:
Click+= new System.EventHandler(this.DoSomething);
难道不行,定义了事件,并且触发事件,则必须有个缺省消息处理函数?

[解决办法]
不用,你再某个函数调用的时候判断是否为null

if(Click!=null)
   Click(this,new EventArgs());
[解决办法]
var evt = Click;
if(evt != null)
    evt(o,e);
[解决办法]


void foo()
{
    ....
    OnClick(new EventArgs());
    .....
}

private void OnClick(EventArgs e)
{
    EventHandler temp=Click;
    if(temp!=null)
       temp(this,e);
}

[解决办法]
一般的做法是封装一个触发消息的方法
public void OnClick(事件参数 e)
{
    if(this.Click != null) this.Click(this, e);
}
[解决办法]
认真理解下事件:http://www.cnblogs.com/zhili/archive/2012/10/27/Event.html

热点排行