利用反射--调用一个按钮的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[1]; //产生方法 MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance); //参数赋值。传入函数 p[0] = 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[1]; //产生方法 MethodInfo m = t.GetMethod(EventName, BindingFlags.NonPublic | BindingFlags.Instance); //参数赋值。传入函数 //获得参数资料 ParameterInfo[] para = m.GetParameters(); //根据参数的名字,拿参数的空值。 p[0] = Type.GetType(para[0].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[1]; //产生方法 MethodInfo m = t.GetMethod(EventName, BindingFlags.NonPublic | BindingFlags.Instance); //参数赋值。传入函数 //获得参数资料 ParameterInfo[] para = m.GetParameters(); //根据参数的名字,拿参数的空值。 p[0] = Type.GetType(para[0].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[1]; if (e == null) p[0] = Type.GetType(para[0].ParameterType.BaseType.FullName).GetProperty("Empty"); else p[0] = 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)13));
测试的时候,是在winform里的控件的调用。在程序里要加入
using System.Reflection;
出处:https://www.cnblogs.com/feiyuhuo/p/5407544.html
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/10406766.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-02-20 WinForm设置窗体默认控件焦点
2017-02-20 C# winform窗口打开特效及窗口位置居中