delegate-利用反射来判断按钮是否添加了某个事件中的疑问

问题描述

利用反射来判断按钮是否添加了某个事件中的疑问

在网上查找资料中时候看到下面的代码

 static void Main(string[] args)
        {
            System.Windows.Forms.Button btn = new System.Windows.Forms.Button();
            btn.Click += new EventHandler(btn_Click);
            btn.Click += new EventHandler(btn_Click2);
            btn.Click += new EventHandler(btn_Click3);
            PropertyInfo pi = btn.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
            EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);
            FieldInfo fieldInfo = (typeof(System.Windows.Forms.Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
            Delegate d = ehl[fieldInfo.GetValue(null)];
            foreach (Delegate del in d.GetInvocationList())
                Console.WriteLine(del.Method.Name);
        }

        static void btn_Click(object sender, EventArgs e)
        {
            Console.WriteLine("Click1");
        }

        static void btn_Click2(object sender, EventArgs e)
        {
            Console.WriteLine("Click2");
        }

        static void btn_Click3(object sender, EventArgs e)
        {
            Console.WriteLine("Click3");
        }

问题来了:
PropertyInfo pi = btn.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
这一句的意思应该是获取属性名为“Event”的属性的信息,但是找了半天,发现button中没有名称为"Event"的属性啊,求大神指点

解决方案

Events是在Control基类中定义的。Button继承自Control

时间: 2023-12-06 15:14:04

delegate-利用反射来判断按钮是否添加了某个事件中的疑问的相关文章

[如何给动态生成的多个按钮同时添加点击事件]

问题描述 [如何给动态生成的多个按钮同时添加点击事件] 解决方案 ...<button onclick='delete(" + m.getmId() + ")'>删除... function delete(id) { 用ajax或者什么办法删除id对应的记录 } 解决方案二: 你还可以给每一行的tr一个id "<tr id=tr_" + m.getmId() + "><td>... 你可以写 function delet

JavaScript我在按钮里面添加了一个事件,点击没反应

问题描述 JavaScript我在按钮里面添加了一个事件,点击没反应 <!documenttype html> <html> <head> <meta></meta> <script type="text/javascript"> var number = 0; var imgs = new Array(); imgs[0]="ww.jpg"; imgs[1]="wq.jpg"

安卓(Android)动态创建多个按钮并添加监听事件_Android

1.获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; 2.自定义layout组件 RelativeLayout layout = new RelativeLayout(this); 3.这里创建1

安卓(Android)动态创建多个按钮并添加监听事件

1.获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; 2.自定义layout组件 RelativeLayout layout = new RelativeLayout(this); 3.这里创建1

button-给动态创建的按钮之间添加空间

问题描述 给动态创建的按钮之间添加空间 在程序中我动态的创建了很多按钮,但是如何在两个按钮之间添加空间呢?我用这样的代码但是没有实现,大家能帮助我吗?谢谢! private LinearLayout LLDynamic; private RelativeLayout.LayoutParams ParaOne;ParaOne = new RelativeLayout.LayoutParams(280 30);Button button1= new Button(Twindo_fromEditGro

.Net/C#: 利用反射编写通用的 rss 2.0 的 reader

rss /* .Net/C#: 利用反射编写通用的 rss 2.0 的 reader 最近在写一个 Simple Rss Reader 网上找到现成代码两种: 1.代码简单的,但不够通用 (如: 本站的一些专用 rss reader) 2.代码复杂的,但没有足够时间去消化 (如: rssbandit) 遂自己动手: 由于 rss 的基本属性大家都有! 但一些特殊不通用属性,如: slash:comments wfw:comment wfw:commentRss trackbackping 不一定

[转载]利用反射动态创建对象

利用反射动态创建对象 (转自张逸的blog) 前两天我发了一篇文章<通过反射动态实例化对象中出现的一个奇怪问题>,对反射中的某些问题疑惑不解.通过这几天不断查看MSDN,上网查询,现在终于解决了该问题. 在VS.Net中,有很多种方法动态调用对象的构造函数.一是通过Activator类的CreateInstance()方法.这个方法我们在Remoting中也用过.它实际上是在本地或从远程创建对象类型,或获取对现有远程对象的引用.它的方法签名是:public static object Crea

利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

(C#)利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""