通过反射获取事件 [英] Getting event via reflection

查看:123
本文介绍了通过反射获取事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

荫试图获得通过反射按钮的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆