最基本的调用方法

(1)button1.PerformClick();
(2)button1_Click(null,null);
(3)button_Click(null,new EventArgs());

利用反射调用

最开始的调用方法

//建立一个函数
private void callOnClick(Button btn)
{
//建立一个类型
Type t = typeof(Button);
//参数对象
object[] p = new object[];
//产生方法
MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
//参数赋值。传入函数
p[] = EventArgs.Empty;
//调用
m.Invoke(btn, p);
return;
} //调用例子。
//调用Button1的onclick
callOnClick(Button1); //调用Button5的onclick
callOnClick(Button5);

扩展一下,可以调用更多的事件。

private void callButtonEvent(Button btn, string EventName)
{
//建立一个类型
Type t = typeof(Button);
//参数对象
object[] p = new object[];
//产生方法
MethodInfo m = t.GetMethod(EventName, BindingFlags.NonPublic | BindingFlags.Instance);
//参数赋值。传入函数
//获得参数资料
ParameterInfo[] para = m.GetParameters();
//根据参数的名字,拿参数的空值。
p[] = Type.GetType(para[].ParameterType.BaseType.FullName).GetProperty("Empty");
//调用
m.Invoke(btn, p);
return;
} //调用例子。
//调用Button1的onclick
callButtonEvent(Button1,"OnClick"); //调用Button5的OnKeyPress
callButtonEvent(Button5,"OnKeyPress");

现在,再来一次扩展。可以处理Button,TextBox等等的一些事件。

private void callObjectEvent(Object obj, string EventName)
{
//建立一个类型,AssemblyQualifiedName拿出有效的名字
Type t = Type.GetType(obj.GetType().AssemblyQualifiedName);
//参数对象
object[] p = new object[];
//产生方法
MethodInfo m = t.GetMethod(EventName, BindingFlags.NonPublic | BindingFlags.Instance);
//参数赋值。传入函数
//获得参数资料
ParameterInfo[] para = m.GetParameters();
//根据参数的名字,拿参数的空值。
p[] = Type.GetType(para[].ParameterType.BaseType.FullName).GetProperty("Empty");
//调用
m.Invoke(obj, p);
return;
} //调用例子。
//调用Button1的onclick
callObjectEvent(Button1,"OnClick"); //调用Button5的OnKeyPress
callObjectEvent(Button5,"OnKeyPress"); //调用Text1的OnTextChanged
callObjectEvent(Text1, "OnTextChanged");

继续来多一个扩展。可以传入事件参数。

private void callObjectEvent(Object obj, string EventName, EventArgs e=null)
{
//建立一个类型
//Type t = typeof(obj.GetType);
Type t = Type.GetType(obj.GetType().AssemblyQualifiedName);
//产生方法
MethodInfo m = t.GetMethod(EventName, BindingFlags.NonPublic | BindingFlags.Instance);
//参数赋值。传入函数
//获得参数资料
ParameterInfo[] para = m.GetParameters();
//根据参数的名字,拿参数的空值。
//参数对象
object[] p = new object[];
if (e == null)
p[] = Type.GetType(para[].ParameterType.BaseType.FullName).GetProperty("Empty");
else
p[] = e;
//调用
m.Invoke(obj, p);
return;
} //调用例子。
//调用Button1的onclick
callObjectEvent(Button1,"OnClick");
//调用Button5的OnKeyPress
callObjectEvent(Button5,"OnKeyPress");
//调用Text1的OnTextChanged
callObjectEvent(Text1, "OnTextChanged");
//调用Form的KeyPress事件, this就是那个winform, 并且传入回车键
callObjectEvent(this, "OnKeyPress", new KeyPressEventArgs((char)));

测试的时候,是在winform里的控件的调用。在程序里要加入

using System.Reflection;  

引用自 :http://blog.csdn.net/dogfish/article/details/7048280

出处:https://www.cnblogs.com/feiyuhuo/p/5407544.html

利用反射--调用一个按钮的Click事件的更多相关文章

  1. C# 调用一个按钮的Click事件(利用反射)

    最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...

  2. JS如何调用隐藏按钮的click事件

    js如何调用隐藏按钮的click事件:1.设定隐藏不要使用Visiable属性,使用style.display=none:2.触发JS事件可以使用fireEvent方法,如:document.getE ...

  3. ASP。net中如何在一个按钮click事件中调用另一个按钮的click事件

    方法一: 直接指定 事件<asp:Button ID="btn1" runat="server" Text="按钮1" onclick ...

  4. avalon 双工绑定以及一个按钮多个事件

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    ...

  5. C#利用反射调用PB编译的COM组件

    问题: 1.根据COM组件的ProgID,得到COM组件公开的类型 2.创建COM组件提供的类型的对象 3.调用执行方法 正确姿势 C#利用反射调用(后期绑定)PB编译的COM组件 C#调用COM组件 ...

  6. jquery移动端一个按钮两个事件

    当一个按钮已经有一个事件,如点击,弹窗显示,若还要加个事件,可以用touchstart 如: var videoCover = $("#videoCover");//视频封面 $( ...

  7. 利用反射调用方法时,处理ref,out参数需要注意的问题(转)

    转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...

  8. 如何用按钮的click事件去触发a标签的click事件

    在jQquery中,可以用如下方式触发input.a标签的click事件: <input id="my_input" /> <a id="my_a&qu ...

  9. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

随机推荐

  1. 深入理解java虚拟机---对象的结构(九)

    注意: 我们可以看到的就是InstanceData的数据. 先转载一篇文章作为开头,因为讲的非常详细,我就简单加工下放到这里: 对象结构 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区 ...

  2. 《图解TCP/IP》读书笔记(转)

    reference: https://www.cnblogs.com/edisonchou/p/5987827.html 一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TC ...

  3. cookie的参数

    def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, ...

  4. L309 单音节词读音规则(一)-辅音字母发音规则

    1 字母和音素不是一一对应的 2单词读音规则知识结构全图 二 15个发音不变化的辅音字母:字母发音和音素一致 b / b /   by d / d /   dog f / f /     fish h ...

  5. Windows 窗体设计器生成的代码

    namespace 窗体的浮动及隐藏{    partial class Form1    {        /// <summary>        /// 必需的设计器变量.      ...

  6. Python 面向对象和面向过程对比

    # 大象装冰箱 # 脚本, 此时代码是最简单的. 不需要构思整个程序的概况 print("开门") print("装大象") print("关门&qu ...

  7. 运行和管理Rabbit

    节点描述的是一个Erlang节点运行着一个Erlang应用程序.Erlang虚拟机的每个实例我们称之为节点.多个Erlang应用程序可以运行在同一个节点之上.节点之间可以进行本地通信.在RabbitM ...

  8. Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门

    文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...

  9. Android Native Hook技术(一)

    原理分析 ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现.该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是 ...

  10. Twisted 安装

    1,官网: https://www.twistedmatrix.com/trac/ 2,下载 https://twistedmatrix.com/Releases/Twisted/18.7/Twist ...