c#如何取得事件注册的方法

这个问题来自论坛,原文为如何判断事件已经被注册过?

用反射取出事件绑定的委托实例,然后用GetInvocationList就可以得到所有注册的方法了。

代码

view plaincopy to clipboardprint?

01.using System;02.using System.Collections.Generic;03.using System.ComponentModel;04.using System.Data;05.using System.Drawing;06.using System.Text;07.using System.Windows.Forms;08.using System.Reflection;09.namespace WindowsApplication1910.{11.    public partial class Form1 : Form12.    {13.        public Form1()14.        {15.            InitializeComponent();16.17.            this.Load+=new EventHandler(Form1_Load1);18.            this.Load+=new EventHandler(Form1_Load2);19.20.            PropertyInfo propertyInfo = (typeof(Form)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);21.            EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(this, null);22.            FieldInfo fieldInfo = (typeof(Form)).GetField("EVENT_LOAD", BindingFlags.Static | BindingFlags.NonPublic);23.24.            Delegate d = eventHandlerList[fieldInfo.GetValue(null)];25.26.            if (d != null)27.            {28.                foreach (Delegate de in d.GetInvocationList())29.                    Console.WriteLine(de.Method.Name);30.            }31.        }32.        private void Form1_Load1(object sender, EventArgs e)33.        {34.            //什么也不干35.        }36.        private void Form1_Load2(object sender, EventArgs e)37.        {38.            //什么也不干39.        }40.    }41.}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索form
, 事件
, using
, load
, 注册
system
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-29 04:21:00

c#如何取得事件注册的方法的相关文章

谈谈C#中的事件注册和注销

由于.NET框架对消息循环机制进行了很好的封装,开发人员不再需要深入的了解Windows事件/消息实现的具体机制,也无需创建复杂的事件结构体和所谓的消息句柄.我们所要做的无非就是--1.使用重载运算符"+="注册一个事件:2.编写对于该事件的处理方法.(关于C#2.0中事件处理的相关介绍,请参阅我的文章:C#2.0的泛型代理和事件 :以一当百的快感 )  如此简单,以至于习惯了Win32编程的伙计们对此嗤之以鼻,讽之:"我们是开手排挡车的专业选手,你们.NET一族只能玩玩自动

libevent (三) 事件注册与循环监听

在libevent中为了监听某种事件的发生,设置事件触发后的回调函数,也就是说对该事件注册到当前的IO模型中. 事件注册 事件初始化 使用`event_new`函数来对事件进行初始化. typedef void (*event_callback_fn)(evutil_socket_t, short, void *);/* 回调函数 */ struct event *event_new(struct event_base *base, evutil_socket_t fd, short what,

C#如何事件注册/委托用法问题

问题描述 C#如何事件注册/委托用法问题 在用事件注册和委托时,遇到了困惑.在button注册事件时,C#默认是这样的:this.button1.Click += new System.EventHandler(this.button1_Click);实际上这样也可以执行:this.button1.Click += this.button1_Click;那么这两种方法到底有什么区别? 为什么要加这个委托?在自定义委托和事件时,按Tab自动补齐时,有时出现下面两种格式的一种,怎么回事?Contro

Java之事件注册

对上次的三个问题的个人理解:     1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这似乎是不现实的. 其次 用 static 修饰的 main 方法是存储在静态的存贮区当中的,也就是说在创建一个类之后,main 函数就已经存在了,去掉 static 修饰之后,编译可以通过,但是不能执行.    2)查 API之后才发现BufferedRead 对象的 readLine()方读到的数据是,读到有换行的地方为一行,直

Javascript 事件注册机制参数覆盖问题

问题描述 诸位大神,最近小白我正在重构项目代码,我学JS刚好1年,水平只能算是还未入门.之前在跟导师交流的时候,有接触一下JAVA的东东,关于解藕方面也借鉴了JAVA的SPRING框架的方式.先上代码:首先在Controller基类里面定义注册机制的方法:_Controller.method("delegateEvents",function(){for(varkeyinthis.events){varmethodName=this.events[key];varmethodArr=t

jQuery防止重复绑定事件的解决方法_jquery

本文实例分析了jQuery防止重复绑定事件的解决方法.分享给大家供大家参考,具体如下: 一.问题: 今天发现jQuery一个对象的事件可以重复绑定多次,当事件触发的时候会引起代码多遍执行. 下面是一个click事件被重复绑定的示例: function reg_button_click(){ $("#button).click(function(){ alert("button click"); }); } $(document).ready(function(){ #重复注册

JavaScript Event学习第四章 传统的事件注册模型_javascript技巧

在最古老的JavaScript浏览器里注册事件只能通过内联模式.自从DHTML从根本上改变了你操作页面的方法,事件的注册就必须有扩展性而且要有很强的适应性.所以就必须有相应的事件模型.Netscape在第三代浏览器中就开始了,IE在第四代浏览器开始. 因为Netscape 3就开始支持这种新的事件注册模型,在浏览器战争前就是事实上的标准.所以微软不得不也是最后一次为了网上那些数不清的使用了Netscape事件处理模型的页面在兼容性上做出了让步. 所以这两个浏览器,事实上也是所有的浏览器都支持下面

深入java事件注册的应用分析_java

对上次的三个问题的个人理解: 1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这似乎是不现实的. 其次 用 static 修饰的 main 方法是存储在静态的存贮区当中的,也就是说在创建一个类之后,main 函数就已经存在了,去掉 static 修饰之后,编译可以通过,但是不能执行.2)查 API之后才发现BufferedRead 对象的 readLine()方读到的数据是,读到有换行的地方为一行,直接用 readL

jquery单击事件执行后台方法提前执行的问题

问题描述 jquery单击事件执行后台方法提前执行的问题 我在主页末尾添加javascript代码如下: $(function(){ $(".fouct1:first").click(function(){ var a=<%=ServerIpAdd()%>; //执行一个后台方法 }); }); 可是,每次刷新页面就执行了ServerIpAdd()方法,而不是单击事件后执行ServerIpAdd()方法(记录单击特定链接的次数),请高手提供一个好的方法,实现单击某个链接以后