怎样判断一个事件是否包含一个特定的委托(或者说一个特定的方法)? 如题: 如:事件A ;委托B;方法C,D 怎样判断A 是否包含C? 委托,事件我不太清楚,可能问题提的就有问题请大侠指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那这样问 A是否被B(C)所绑定? static void Main(string[] args) { Button btn = new Button(); btn.Click += new EventHandler(btn_Click2); PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic); EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null); FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic); Delegate d = ehl[fieldInfo.GetValue(null)]; foreach (Delegate del in d.GetInvocationList()) { Console.WriteLine(del.Method.Name == "btn_Click"); } } static void btn_Click(object sender, EventArgs e) { MessageBox.Show("Hello"); } static void btn_Click2(object sender, EventArgs e) { MessageBox.Show("Hello Again"); } 查了查PRopertyInfo,EventHandlerList ,FieldInfo ,还是没看明白 你的意思是,判断委托B和C、D是否符合事件A的签名,是要实现这样的效果吗? ojlovecd 代码解释如下: //为Button1绑定一个事件处理程序 Button btn = new Button(); btn.Click += new EventHandler(button2_Click); //获取Button类定义的所有事件的信息 PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic); //获取Button对象btn的事件处理程序列表 EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null); //获取Control类Click事件的字段信息 FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic); //用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象 //事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行 //因此Delegate对象,有一个GetInvocationList方法,用来获取这个委托已经绑定的所有事件处理程序 Delegate d = ehl[fieldInfo.GetValue(null)]; foreach (Delegate del in d.GetInvocationList()) { //判断一下某个事件处理程序是否已经被绑定到Click事件上 Console.WriteLine(del.Method.Name == "button1_Click"); } fdsfgsadfasdfasdfasfasdfas[align=center]*********************************************************** 欢迎使用 CSDN 小秘书 http://blog.csdn.net/whowhen21***********************************************************[/align] 无限级,如何得到某一父级下的所有子类信息 DevExpress中的code 128条码怎么写 求一个SQL查询语句 框架与母版页 模板也问题,急死... 如何利用Random函数读取Sql的资料,并循环显示在label上 如何阻止窗口关闭 C#可以编写NT服务吗?怎么写? 如何在c#中打开电脑的串口并读取串口中的数据呢?谢谢各位 c1 FlexGrid中如何实现锁定特定单元格不可编辑? DataGridView 连接MySQL数据库表 C# 中如何将 exif 信息写回图片?
A是否被B(C)所绑定?
static void Main(string[] args)
{
Button btn = new Button();
btn.Click += new EventHandler(btn_Click2);
PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = ehl[fieldInfo.GetValue(null)]; foreach (Delegate del in d.GetInvocationList())
{
Console.WriteLine(del.Method.Name == "btn_Click");
}
} static void btn_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello");
} static void btn_Click2(object sender, EventArgs e)
{
MessageBox.Show("Hello Again");
}
查了查PRopertyInfo,EventHandlerList ,FieldInfo ,还是没看明白
ojlovecd 代码解释如下: //为Button1绑定一个事件处理程序
Button btn = new Button();
btn.Click += new EventHandler(button2_Click);
//获取Button类定义的所有事件的信息
PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
//获取Button对象btn的事件处理程序列表
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);
//获取Control类Click事件的字段信息
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
//用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象
//事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行
//因此Delegate对象,有一个GetInvocationList方法,用来获取这个委托已经绑定的所有事件处理程序
Delegate d = ehl[fieldInfo.GetValue(null)]; foreach (Delegate del in d.GetInvocationList())
{
//判断一下某个事件处理程序是否已经被绑定到Click事件上
Console.WriteLine(del.Method.Name == "button1_Click");
}
http://blog.csdn.net/whowhen21***********************************************************[/align]