首页 新闻 搜索 专区 学院

如何知道winform中某一个控件上绑定了处理方法的所有事件

0
悬赏园豆:10 [待解决问题]

每个控件都有属性视图,在属性视图里可以看到该控件的事件有哪些。

问题:

      如何得到这些这个控件上已经绑定了处理方法的事件名称呢?

梦回大唐吟诗篇的主页 梦回大唐吟诗篇 | 初学一级 | 园豆:144
提问于:2016-05-03 09:11
< >
分享
所有回答(3)
1

 你不是都问过了么,使用反射啊

刘宏玺 | 园豆:14006 (专家六级) | 2016-05-03 10:58

大侠可以试下,通过反射可以完成基本功能,但是要通用,还是有问题,打个比方哈,你要获取到绑定到一个CheckBox上的CheckedChanged事件上的所有方法,你怎么写呢?我抛砖引玉一下:

 PropertyInfo propertyInfo = label1.GetType().GetProperty("Events", BindingFlags.NonPublic
                                                                    | BindingFlags.Static | BindingFlags.Instance);
            EventHandlerList eventHandlerList = propertyInfo.GetValue(chobox1, new object[] { }) as EventHandlerList;

            FieldInfo fieldInfo;
            StringBuilder sb = new StringBuilder();
            
            EventInfo[] events = chobox1.GetType().GetEvents();

            for (int i = 0; i < events.Length; i++)
            {
              fieldInfo = typeof(Control).GetField("Event" + events[i].Name.Replace("Changed",""), BindingFlags.NonPublic| BindingFlags.Static);}
var eventKey = fieldInfo.GetValue(chobox1);
                var eventHandler = eventHandlerList[eventKey] as Delegate;
                Delegate[] invocationList = eventHandler.GetInvocationList();

                foreach (var handler in invocationList)
                {
                    sb.Append(handler.GetMethodInfo().Name+"_"+i + "\r\n");
                }

很可惜,以上代码完不成任务,button的click事件可以轻易完成,但是这个不行。所以想问问大伙有没有更好,更通用的解决方案。

备注:各位大侠尽量帮忙贴下代码哈,光回复反射木有用~

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-03 17:14
0

属性视图里面有个闪电符号.

里面可以看

晋升中的FE | 园豆:519 (小虾三级) | 2016-05-03 14:19

。。。。。

支持(0) 反对(0) 梦回大唐吟诗篇 | 园豆:144 (初学一级) | 2016-05-03 17:14
0

反射

博学多思 | 园豆:84 (初学一级) | 2016-05-03 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册