c# 移除控件中的原有事件处理程序

有的时候我们用到别人的控件,但这个控件本身为DoubleClick已经附加了一个事件处理程序,比如我们双击这个控件的时候会弹出一个窗体,但我们又不想要这个窗体,但我们又不能用DoubleClick-=。。。。。。的方法屏蔽,因为这个事件处理程序是别人写好的,不在我们的代码中,这个时候我们怎么才能干掉原来的DoubleClick处理程序呢?

假如我们所使用的控件类名为testControl,一个实例名叫testControl1,这个控件本身有个DoubleClick处理方法,是弹出一个窗体,这时我要屏蔽掉,可以这么干:

[csharp]  view plain  copy
  1. Type t=typeof(testControl);//或者Type t=testControl1.GetType();  
  2.   
  3. PropertyInfo propInfo = t.GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);  
  4.   
  5. EventHandlerList eventHandlers = (EventHandlerList)propInfo.GetValue(testControl1, null);  
  6.   
  7. FieldInfo fieldInfo =typeof(Control).GetField("EventDoubleClick", BindingFlags.Static | BindingFlags.NonPublic);  
  8.   
  9. Delegate del= eventHandlers[fieldInfo.GetValue(testControl1)];  
  10.   
  11.   
  12.  if (del != null)  
  13.  {  
  14.              foreach (Delegate temp in del.GetInvocationList())  
  15.              {  
  16.                       eventHandlers.RemoveHandler(fieldInfo.GetValue(null), temp);  
  17.              }  
  18.  }  
  19.   
  20. //下面加上我们自己为这个事件定义的事件处理程序  
  21.   
  22. testControl1.DoubleClick+=new EventHandler(testControl1_DoubleClick);  


 

OK,搞定!

 

另一种方法:

           Type t = m_MapService.GetType() ;//或者Type t=testControl1.GetType();   
            FieldInfo finfo = t.GetField("OnZBST",BindingFlags.NonPublic | BindingFlags .Instance);
            Delegate instanceDelegate = finfo.GetValue(m_MapService) as Delegate;
            EventInfo eve = t.GetEvent("OnZBST");
            foreach (Delegate d in instanceDelegate.GetInvocationList())
            {
                eve.RemoveEventHandler(m_MapService, d);

            } 

看了觉得用的上的哥们情去原文帮顶一下!

原文链接:https://blog.csdn.net/ku_cha_cha/article/details/6994573

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值