一个事件被多个函数给订阅,将会按照订阅顺序触发对应的处理函数!
Form1中的代码:
public static event EventHandler event1;
public Form1()
{
InitializeComponent();
Form2 f2 = new Form2();
event1 += Form1_event1;
event1 += Form1_event2;
}
private void Form1_event2(object sender, EventArgs e)
{
MessageBox.Show("3");
}
void Form1_event1(object sender, EventArgs e)
{
MessageBox.Show("1");
}
private void button1_Click(object sender, EventArgs e)
{
EventArgs ee=new EventArgs();
event1(this, ee);
}
Form2中的代码:
public Form2()
{
InitializeComponent();
Form1.event1 += Form1_event1;
}
void Form1_event1(object sender, EventArgs e)
{
MessageBox.Show("2");
}
点击Form1中的button1后将会依次显示2,1,3消息盒
另外,如果把button1_click改为:
private void button1_Click(object sender, EventArgs e)
{
event1 += Form1_event1;
EventArgs ee=new EventArgs();
event1(this, ee);
MessageBox.Show("4");
}
那就会弹出:2,1,3,1,4!
由此可以看出,“+=”的作用就是把事件处理函数按照顺序放在一个队列里,而不管是否有重复的事件处理函数,然后待触发事件后,就把队列中所有的事件处理函数放在触发事件处依次执行。“-=”的作用就是去掉队列中相应的事件处理函数,若有重复的,就从重复的函数中排在最后面的开始去除。