最基本的調用方法
(1)button1.PerformClick();
(2)button1_Click(null,null);
(3)button_Click(null,new EventArgs());html
利用反射調用
最開始的調用方法函數
//創建一個函數 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);
擴展一下,能夠調用更多的事件。post
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");
繼續來多一個擴展。能夠傳入事件參數。this
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裏的控件的調用。在程序裏要加入spa
using System.Reflection;
引用自 :http://blog.csdn.net/dogfish/article/details/7048280.net