解决方案:C# 当按钮不可见时(Visible=False),调用Button.PerformClick事件无效!

  解决方案:C# 当按钮不可见时(Visible=False),调用Button.PerformClick事件无效!


解决方案

获取原按钮实例的Click事件,使用Invoke方式执行Click事件委托。


C# Code:

SimpleButton originalButton = (SimpleButton)GetButton((sender as SimpleButton).Tag.ToString());

//当originalButton不可见时,调用PerformClick事件无效!
//if (originalButton != null) originalButton.PerformClick();

//解决方案:获取原按钮实例的Click事件,使用Invoke方式执行Click事件委托
System.Reflection.PropertyInfo propertyInfo = (typeof(Control)).GetProperty("Events", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo fieldInfo
= (typeof(Control)).GetField("EventClick", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
EventHandlerList eventHandlerList
= (EventHandlerList)propertyInfo.GetValue(originalButton, null);
Delegate method
= eventHandlerList[fieldInfo.GetValue(null)];

if (method != null)
{
  
//委托的调用列表
  
var list = method.GetInvocationList();
  
if (list.Count() == 1)
  {
    originalButton.Invoke(method, sender, e);
  }
  
else
  {
    
//若有多个Click事件,依次调用
    
foreach (Delegate d in list) originalButton.Invoke(d, sender, e);
  }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

解决方案:C# 按钮可见(Visible=False),调用Button.PerformClick事件无效!
ButtonStateChanged事件详解 - 按钮状态改变触发的事件
LookupEdit.EditValueChanged事件内给其它文本框赋值无效或变回原来的值
IButtonInfo接口增加Visible属性控制按钮是否显示
VS.NET 窗体继承 - 按钮组件隐藏或位置正确解决方案
C# 调用Process.Start 请求的操作需要提升解决方案
C#获取按钮的EventClick事件,EventHandlerList委托的调用列表
C/S开发框架Toolbar按钮的动态生成与调用关系
EditValueChanged事件,给另外文本框赋值,为什么事件本身的值赋
C#深入剖析事件(C# Event详解)
C# Winform 开发框架 - 业务单据附件管理解决方案(原)
C#源代码安全缺陷与提高源代码质量解决方案
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全
C#.Net局域网版本自动升级解决方案(原创)
C#编码直接调用WCF服务协议参数设置
RedGate Licensing 激活软件提示 SQLPrompt.TrayApp解决方案
禁用模块列表的关闭按钮(ShowCloseButton=False)
提供的URI方案http无效,应为https,参数名via - WCF服务采用HTTPS协议
C#调用C++编译的DLL详解