最基本的调用方法

(1)button1.PerformClick();

(2)button1_Click(null,null);

(3)button_Click(null,new EventArgs());

 

利用反射调用

最开始的调用方法



利用反射--调用一个按钮的Click事件_javascript

//建立一个函数  
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);


利用反射--调用一个按钮的Click事件_javascript_02


扩展一下,可以调用更多的事件。



利用反射--调用一个按钮的Click事件_edn_03

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");


利用反射--调用一个按钮的Click事件_edn_04


现在,再来一次扩展。可以处理Button,TextBox等等的一些事件。



利用反射--调用一个按钮的Click事件_赋值_05

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");


利用反射--调用一个按钮的Click事件_控件_06


继续来多一个扩展。可以传入事件参数。



利用反射--调用一个按钮的Click事件_edn_07

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));


利用反射--调用一个按钮的Click事件_javascript_08


测试的时候,是在winform里的控件的调用。在程序里要加入



using System.Reflection;


 ​


 

 

 

最基本的调用方法

(1)button1.PerformClick();

(2)button1_Click(null,null);

(3)button_Click(null,new EventArgs());

 

利用反射调用

最开始的调用方法



利用反射--调用一个按钮的Click事件_赋值_09

//建立一个函数  
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);


利用反射--调用一个按钮的Click事件_edn_10


扩展一下,可以调用更多的事件。



利用反射--调用一个按钮的Click事件_javascript_11

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");


利用反射--调用一个按钮的Click事件_javascript_12


现在,再来一次扩展。可以处理Button,TextBox等等的一些事件。



利用反射--调用一个按钮的Click事件_edn_13

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");


利用反射--调用一个按钮的Click事件_控件_14


继续来多一个扩展。可以传入事件参数。



利用反射--调用一个按钮的Click事件_赋值_15

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));


利用反射--调用一个按钮的Click事件_赋值_16


测试的时候,是在winform里的控件的调用。在程序里要加入



using System.Reflection;


 ​