事件委托的三种写法:
1、在给委托事件绑定方法的时候,使用new 委托类型(方法名)
该种写法的注意事项:方法的参数的类型一定要一致否则虽然编译通过但是无法执行到处理方法内部;

//声明委托原型:
public delegate void ShowMessageEventHandler(string strMsg);
//声明ShowMessageEventHandler类型的事件对象:
public event ShowMessageEventHandler OnShowMessage;
//注册事件对象的处理方法:(第一种写法)
OnShowMessage += new ShowMessageEventHandler(my_OnShowMessage);

//处理方法:要和声明的委托的类型的参数个数和类型一致.
void my_OnShowMessage(string strMsg)
{
    MessageBox.Show(strMsg);
}

2、在给委托事件绑定方法的时候,直接使用方法名
这种方法可以让编译器自动推理出委托类型也是上面一种写法的简写方式;

//声明委托原型:
public delegate void ShowMessageEventHandler(string strMsg);
//声明ShowMessageEventHandler类型的事件对象:
public event ShowMessageEventHandler OnShowMessage;
//注册事件对象的处理方法:(第二种写法)
OnShowMessage += my_OnShowMessage;

//处理方法:要和声明的委托的类型的参数个数和类型一致.
void my_OnShowMessage(string strMsg)
{
    MessageBox.Show(strMsg);
}

3、实例一个委托变量(此时也指定了对应的处理方法),在给使用的地方也就是给事件指定的时候直接用这个委托变量直接给事件赋值即可;

//声明委托原型:
public delegate void ShowMessageEventHandler(string strMsg);
//声明ShowMessageEventHandler类型的事件对象:
public event ShowMessageEventHandler OnShowMessage;

(第三种写法)
//实例化委托(定义一个委托变量 clsShowMessageEventHandler):
private ShowMessageEventHandler clsShowMessageEventHandler = null;
//绑定该委托的处理方法:
clsShowMessageEventHandler = new ShowMessageEventHandler(my_OnShowMessage);
//注册事件对象使用的委托实例(使用前面定义的委托变量):
OnShowMessage += clsShowMessageEventHandler;

//处理方法:要和声明的委托的类型的参数个数和类型一致.
void my_OnShowMessage(string strMsg)
{
    MessageBox.Show(strMsg);
}