C#怎么使用反射获取事件的响应方法

C#如何使用反射获取事件的响应方法?
如题,
Label li =new Label();
MouseDown += new MouseEventHandler(this.Down);

在另一个地方有个循环获取所有控件

foreach (Control c in shapeContainer1.Controls)
{
      .........
}

如何在这个foreach中获取指定的Control的指定响应方法的名称 “Down”呢?
------解决思路----------------------
引用:
Quote: 引用:

public Form3()
        {
            InitializeComponent();

            button1.MouseClick += new MouseEventHandler(button1_MouseClick);
            
            foreach (Control c in this.Controls) 
            {
                if (c is Button) 
                {
                    Button btn = c as Button;
                    if(btn.Name == "button1")
                    {
                        Delegate[] _ControlDelegate = GetObjectEventList(button1, "EventMouseClick");
                        Delegate d = _ControlDelegate[0];
                        MethodInfo info = d.Method;
                        string str = info.Name;
                    }                    
                }
            }
        }

        private Delegate[] GetObjectEventList(Control p_Control, string p_EventName)
        {
            PropertyInfo _PropertyInfo = p_Control.GetType().GetProperty("Events", BindingFlags.Instance 
------解决思路----------------------
 BindingFlags.NonPublic);
            if (_PropertyInfo != null)
            {
                object _EventList = _PropertyInfo.GetValue(p_Control, null);
                if (_EventList != null && _EventList is EventHandlerList)
                {
                    EventHandlerList _List = (EventHandlerList)_EventList;
                    FieldInfo _FieldInfo = (typeof(Control)).GetField(p_EventName, BindingFlags.Static 
------解决思路----------------------
 BindingFlags.NonPublic);
                    if (_FieldInfo == null) return null;
                    Delegate _ObjectDelegate = _List[_FieldInfo.GetValue(p_Control)];
                    if (_ObjectDelegate == null) return null;
                    return _ObjectDelegate.GetInvocationList();
                }
            }
            return null;
        } 

        void button1_MouseClick(object sender, MouseEventArgs e)
        {
            throw new NotImplementedException();
        }
你这个代码的第一段我改了一下是如下
Delegate[] _ControlDelegate = GetObjectEventList(this.Controls[1], "EventMouseDown");
            Delegate d = _ControlDelegate[0];
            MethodInfo info = d.Method;
            string str = info.Name;

然后运行的时候_ControlDelegate这个值为空
你确定你的这个this.Controls[1]注册了MouseDown事件?