利用反射--调用一个按钮的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; /** * ...
随机推荐
- CentOS7安装配置Bacular
参考: http://blog.51cto.com/molewan/2045602 https://blog.csdn.net/heshangkung/article/details/47955023 ...
- angular2的依赖注入
更好阅读体验,请看原文 在读这篇文章之前,你要先了解一下什么是依赖注入,网上关于这个的解释很多,大家可以自行Google. 我们这一篇文章还是以QuickStart项目为基础,从头开始讲解怎么在Ang ...
- elasticsearch内存优化设置
1.禁用交换分区 最简单的选项是完全禁用交换,通常elasticsearch是在框上运行的唯一服务,内存由ES_HEAP_SIZE环境变量控制,设有必要启用交换分区 linux:swapoff -a ...
- mail命令入门及进阶
mail是linux shell中的邮件工具,与crontab配合使用,可以实现定期发送邮件.本文主要介绍mail工具使用方法及注意事项. 1.mail命令一般用法: mail –s "邮件 ...
- HTTP Security Header Not Detected未检测到HTTP安全标头
遇到此安全问题,只需修改Web.config文件. 如: 未处理之前配置代码如下: <httpProtocol> <customHeaders> <add name=&q ...
- system v共享内存与信号量综合
ipc.h #include <sys/types.h> #include <unistd.h> #include <sys/ipc.h> #include < ...
- angular上传获取图片的directive指令
在AngularJS中,操作DOM一般在指令中完成,那么指令是如何实现的呢?指令的作用是把我们自定义的语义化标签替换成浏览器能够认识的HTML标签 一般的事件监听是在对静态的dom绑定事件,而如果在指 ...
- ubuntu下载超快的一个站点
http://mirrors.163.com/ubuntu-releases/14.04/
- ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more inte ...
- 11月15Sprint计划会议及内容·
今天对整体设计做了明确的规划 工作分配: 1规划 2规则制定 3窗体设计 4模型设计 5代码编写 6美化 7产品交付 8后期宣传 王超群前四项 吕浩宇后四项