通过反射获取事件 [英] Getting event via reflection
本文介绍了通过反射获取事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
荫试图获得通过反射按钮的Click事件,这是我的代码:
Iam trying to get the Click event of a button via reflection and this is my code :
Assembly assem = Assembly.GetExecutingAssembly();
Type tExForm = btnSave.GetType();
Object exFormAsObj = Activator.CreateInstance(tExForm);
EventInfo evClick = tExForm.GetEvent("Click");
Type tDelegate = evClick.EventHandlerType;
MethodInfo miHandler=
btnSave.GetType(). GetMethod("Click",
BindingFlags.NonPublic | BindingFlags.Instance);
Delegate d = Delegate.CreateDelegate(tDelegate, btnSave, miHandler);
MethodInfo addHandler = evClick.GetAddMethod();
Object[] addHandlerArgs = { d };
addHandler.Invoke(exFormAsObj, addHandlerArgs);
然而, miHandler
变量总是空!
注意的主要问题,我关心的是如何调用在运行时的特定控制的事件,有没有办法?例如,我要选择当用户按下F1键触发其click事件。
Note The main issue I am concerned in is how to invoke an event of a specific control at run time, is there a way? For example I want to choose which click event to trigger when the user presses F1.
推荐答案
您应该包括 BindingFlag.FlattenHierarchy
,因为点击
在控制
的定义,而不是按钮
。
You should include the BindingFlag.FlattenHierarchy
since Click
is defined on Control
, not Button
.
EventInfo miHandler =
btnSave.GetType(). GetEvent("Click",
BindingFlag.FlattenHierarchy | BindingFlags.Instance);
这篇关于通过反射获取事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文