怎样得到事件中所添加的所有委托

例如
System.Windows.Forms.Form form1=new Form();
form1.Click+=new EventHandler(form1_Click);
form1.Click+=new EventHandler(form2_Click);
form1.Click+=new EventHandler(form3_Click);
现在我要怎样才可以动态的寻找到click事件中的N个委托。
---------------------------------------------------------------

假设有窗体 Form1
Load 事件中 动态加入事件处理
this.Click += new EventHandler(Form1_Click);
this.Click += new EventHandler(Form2_Click);

Form1_Click 和 Form2_Click
private void Form1_Click(object sender, EventArgs e)
{
MessageBox.Show("Click 1~~~~~~~");
}
private void Form2_Click(object sender, EventArgs e)
{
MessageBox.Show("Click 2~~~~~~~");
}

试试使用下面的代码返回委托
Type t = typeof(System.Windows.Forms.Control);
object eventClick = t.InvokeMember("EventClick", System.Reflection.BindingFlags.GetField ¦ System.Reflection.BindingFlags.Static ¦ System.Reflection.BindingFlags.NonPublic , null, null, null);

System.Delegate click = this.Events[eventClick];
MessageBox.Show("Delegates : " + click.GetInvocationList().Length.ToString());
// 个数
foreach(System.Delegate myClickDelegate in click.GetInvocationList())
{
MessageBox.Show("Invoke Method :" + myClickDelegate.Method.Name);
// 每个委托的名字
myClickDelegate.DynamicInvoke(new object[] {this, EventArgs.Empty});
// 调用它们
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus