ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 调用一个按钮的Click事件

2019-06-14 10:00:10  阅读:300  来源: 互联网

标签:调用 C# Button1 参数 Button5 按钮 callObjectEvent Type 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;  

标签:调用,C#,Button1,参数,Button5,按钮,callObjectEvent,Type,Click
来源: https://blog.csdn.net/oshan2012/article/details/91951049

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有