我看了您Blog上的文章:
"得到一个委托链上的所有方法?"
http://blog.sunmast.com/sunmast/archive/2005/04/21/1769.aspx我现在也正好碰到这个问题,但我用得不是.net的内部控件,我用得是外部的ActiveX控件,照您的方法不能解决我得问题。比如我用了一个VB6的ListView控件:我在这一句不能得到正确的值EventHandlerList fplist = pEvents.GetValue(this.axListView1,null) as EventHandlerList; 
不知道什么原因。 
求您的解答,谢谢。 其实我的问题就是:如何能知道ActiveX控件上某个事件是否加载了某个事件处理方法,有知道的大侠也来帮我一下。
谢谢大家。

解决方案 »

  1.   

    listview的事件可能就不像.net的控件封装入EventHandlerList
    http://www.mblogger.cn/web.mblogger.cn/NickChen/posts/19020.htm
      

  2.   

    我没有用过VB6
    如果是用了Interop后的COM,那VS.NET会自动为你生成一个COM的包装,同样在bin目录
    同Reflector反编译之,可以看到其事件的实现
      

  3.   

    如果反编译出来后是这样,那我应该怎样按照你的方法来作啊。我还是没有领会到你的方法的作法。
    [Clsid("{bdd1f04b-858b-11d1-b16a-00c0f0283628}"), DesignTimeVisible(true), DefaultEvent("BeforeLabelEdit")]
    public class AxListView : AxHost
    {
          // Events
          public event ListViewEvents_AfterLabelEditEventHandler AfterLabelEdit;
          public event ListViewEvents_BeforeLabelEditEventHandler BeforeLabelEdit;
          public event EventHandler ClickEvent;
          public event ListViewEvents_ColumnClickEventHandler ColumnClick;
          public event EventHandler DblClick;
          public event ListViewEvents_ItemCheckEventHandler ItemCheck;
          public event ListViewEvents_ItemClickEventHandler ItemClick;
          public event ListViewEvents_KeyDownEventHandler KeyDownEvent;
          public event ListViewEvents_KeyPressEventHandler KeyPressEvent;
          public event ListViewEvents_KeyUpEventHandler KeyUpEvent;
          public event ListViewEvents_MouseDownEventHandler MouseDownEvent;
          public event ListViewEvents_MouseMoveEventHandler MouseMoveEvent;
          public event ListViewEvents_MouseUpEventHandler MouseUpEvent;
          public event ListViewEvents_OLECompleteDragEventHandler OLECompleteDrag;
          public event ListViewEvents_OLEDragDropEventHandler OLEDragDrop;
          public event ListViewEvents_OLEDragOverEventHandler OLEDragOver;
          public event ListViewEvents_OLEGiveFeedbackEventHandler OLEGiveFeedback;
          public event ListViewEvents_OLESetDataEventHandler OLESetData;
          public event ListViewEvents_OLEStartDragEventHandler OLEStartDrag;    
          // Fields
          private ListViewEvents_AfterLabelEditEventHandler AfterLabelEdit;
          private ListViewEvents_BeforeLabelEditEventHandler BeforeLabelEdit;
          private EventHandler ClickEvent;
          private ListViewEvents_ColumnClickEventHandler ColumnClick;
          private AxHost.ConnectionPointCookie cookie;
          private EventHandler DblClick;
          private AxListViewEventMulticaster eventMulticaster;
          private ListViewEvents_ItemCheckEventHandler ItemCheck;
          private ListViewEvents_ItemClickEventHandler ItemClick;
          private ListViewEvents_KeyDownEventHandler KeyDownEvent;
          private ListViewEvents_KeyPressEventHandler KeyPressEvent;
          private ListViewEvents_KeyUpEventHandler KeyUpEvent;
          private ListViewEvents_MouseDownEventHandler MouseDownEvent;
          private ListViewEvents_MouseMoveEventHandler MouseMoveEvent;
          private ListViewEvents_MouseUpEventHandler MouseUpEvent;
          private IListView ocx;
          private ListViewEvents_OLECompleteDragEventHandler OLECompleteDrag;
          private ListViewEvents_OLEDragDropEventHandler OLEDragDrop;
          private ListViewEvents_OLEDragOverEventHandler OLEDragOver;
          private ListViewEvents_OLEGiveFeedbackEventHandler OLEGiveFeedback;
          private ListViewEvents_OLESetDataEventHandler OLESetData;
          private ListViewEvents_OLEStartDragEventHandler OLEStartDrag;
    }谢谢啊。
      

  4.   

    已解决了。
    FieldInfo f = (typeof(Axmscomctl.AxListView)).GetField("BeforeLabelEdit",BindingFlags.Instance| BindingFlags.NonPublic);
    object key =f.GetValue(this.axListView1);
    Delegate b=(Axmscomctl.ListViewEvents_BeforeLabelEditEventHandler)key;
    foreach(Delegate g in b.GetInvocationList())
    {
       MessageBox.Show(g.Method.Name);
    }
    谢谢大家。