利用反射--调用一个按钮的Click事件
最基本的调用方法
(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;
出处:https://www.cnblogs.com/feiyuhuo/p/5407544.html
利用反射--调用一个按钮的Click事件的更多相关文章
- C# 调用一个按钮的Click事件(利用反射)
最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...
- JS如何调用隐藏按钮的click事件
js如何调用隐藏按钮的click事件:1.设定隐藏不要使用Visiable属性,使用style.display=none:2.触发JS事件可以使用fireEvent方法,如:document.getE ...
- ASP。net中如何在一个按钮click事件中调用另一个按钮的click事件
方法一: 直接指定 事件<asp:Button ID="btn1" runat="server" Text="按钮1" onclick ...
- avalon 双工绑定以及一个按钮多个事件
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- C#利用反射调用PB编译的COM组件
问题: 1.根据COM组件的ProgID,得到COM组件公开的类型 2.创建COM组件提供的类型的对象 3.调用执行方法 正确姿势 C#利用反射调用(后期绑定)PB编译的COM组件 C#调用COM组件 ...
- jquery移动端一个按钮两个事件
当一个按钮已经有一个事件,如点击,弹窗显示,若还要加个事件,可以用touchstart 如: var videoCover = $("#videoCover");//视频封面 $( ...
- 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
- 如何用按钮的click事件去触发a标签的click事件
在jQquery中,可以用如下方式触发input.a标签的click事件: <input id="my_input" /> <a id="my_a&qu ...
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
随机推荐
- jq demo--横向+展开菜单,支持m站
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- win8 下面 listen 的队列长度貌似无效了 上c/s 代码 并附截图,有图有真相
#include <WinSock2.h> #include <stdio.h> #include <windows.h> DWORD ServerRoutine( ...
- poj3279(dfs+二进制枚举思路)
题意转载自https://www.cnblogs.com/blumia/p/poj3279.html 题目属性:DFS 相关题目:poj3276 题目原文:[desc]Farmer John know ...
- mvc4使用KindEditor文本编辑器
最近做项目要用文本编辑器,编辑器好多种,这里介绍KindEditor在asp.net mvc4中的使用方法. 一.准备工作: 1.下载KindEditor.去官网:http://www.kindsof ...
- synchronized(四)
package com.bjsxt.base.sync005;/** * synchronized的重入 * @author alienware * */public class SyncDubbo1 ...
- vue 缩水版 双向绑定
function Observer(obj, key, value){ var dep = new Dep(); if (Object.prototype.toString.call(value) = ...
- 压缩后的数据 要经过 base64_encode 后才能在网络上传送
function ob_gzip($content) // $content 就是要压缩的页面内容{ if(!headers_sent() && // 如果页面头部信息还没有输出 ex ...
- Java学习笔记24(Map集合)
Map接口: Map接口与Collection接口无继承关系. 区别:Collection中的元素是孤立的,一个一个存进去的. Map作为一个映射集合,每一个元素包含Key-value对(键-值对). ...
- Python 数据结构--查找
1 顺序查找O(n) def sequential_search(a_list, item): pos = 0 found = False while pos < len(a_list) and ...
- 【Python】爬虫-2
8. urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL的headers),urllib.urlopen只接收一个url ...