C#.NET7 VS2022 使用反射动态设置按钮Click事件
C#.NET7 VS2022 使用反射动态设置按钮Click事件使用.NET反射机制动态设置按钮Click事件,开发环境:VS2022,.NET7
注意:.NET Framework 通过 EventClick获取FieldInfo,.NET7改名为 s_clickEvent。
C# Code:
//获取Control的Events属性 = {System.ComponentModel.EventHandlerList Events}
System.Reflection.PropertyInfo propertyInfo = (typeof(Control)).GetProperty("Events", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
//获取Events属性值 = {System.ComponentModel.EventHandlerList}
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(btnRef, null);
//获取EventClick事件 = {System.Object s_clickEvent}, 注意:.NET7改名为:s_clickEvent
System.Reflection.FieldInfo fieldInfo = (typeof(Control)).GetField("s_clickEvent", System.Reflection.BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
//获取委托
Delegate d = eventHandlerList[fieldInfo.GetValue(null)];
if (d != null)
{
foreach (Delegate temp in d.GetInvocationList())
{
btnNew.Click += (EventHandler)temp;
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
//获取Control的Events属性 = {System.ComponentModel.EventHandlerList Events}
System.Reflection.PropertyInfo propertyInfo = (typeof(Control)).GetProperty("Events", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
//获取Events属性值 = {System.ComponentModel.EventHandlerList}
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(btnRef, null);
//获取EventClick事件 = {System.Object s_clickEvent}, 注意:.NET7改名为:s_clickEvent
System.Reflection.FieldInfo fieldInfo = (typeof(Control)).GetField("s_clickEvent", System.Reflection.BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
//获取委托
Delegate d = eventHandlerList[fieldInfo.GetValue(null)];
if (d != null)
{
foreach (Delegate temp in d.GetInvocationList())
{
btnNew.Click += (EventHandler)temp;
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761

参考文档:
VS2022 .NET7手动更改组件类型(TextEdit改为ComboBoxEdit)|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
ERP,MES软件快速开发平台(Winform+VS2022+C#+.NET7)
VS2022/.NET7:CA1416:可在所有平台上访问此调用站点。"xxx"仅在 'windows'上受支持。
VS2022 .NET7 部署 DevExpress V22.2 开发包 | 开发教程
VS2022 使用 .NET 升级助手将.NET Framework程序升级到 .NET 6/.NET7
.NET7+VS2022 WinFormsApp软件开发平台(2023最新发布)
解决方案:C# 当按钮不可见时(Visible=False),调用Button.PerformClick事件无效!
C#获取按钮的EventClick事件,EventHandlerList委托的调用列表
DevExpress GridView 表格内嵌ButtonEdit按钮列图片按钮及Click事件
关于Click事件sender参数问题
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
塑胶板材行业ERP系统软件开发平台(VS2022+C#+Winform)
ERP/MES系统通用快速开发平台(VS2022+C#+EF)
VS2022 .NET7手动更改组件类型(TextEdit改为ComboBoxEdit)|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
ERP,MES软件快速开发平台(Winform+VS2022+C#+.NET7)
VS2022/.NET7:CA1416:可在所有平台上访问此调用站点。"xxx"仅在 'windows'上受支持。
VS2022 .NET7 部署 DevExpress V22.2 开发包 | 开发教程
VS2022 使用 .NET 升级助手将.NET Framework程序升级到 .NET 6/.NET7
.NET7+VS2022 WinFormsApp软件开发平台(2023最新发布)
解决方案:C# 当按钮不可见时(Visible=False),调用Button.PerformClick事件无效!
C#获取按钮的EventClick事件,EventHandlerList委托的调用列表
DevExpress GridView 表格内嵌ButtonEdit按钮列图片按钮及Click事件
关于Click事件sender参数问题
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
塑胶板材行业ERP系统软件开发平台(VS2022+C#+Winform)
ERP/MES系统通用快速开发平台(VS2022+C#+EF)
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
