1
我需要一點幫助!在運行時將事件處理程序添加到一個控件,其中的主體源代碼存儲在變量中
我在運行時創建自定義控件,反序列化包含信息的xml。 我的自定義控件有兩個屬性,一個是事件名稱,另一個是事件引發時執行的代碼(即方法體)。
我提取了兩個變量的值。我需要的是在運行時爲執行存儲在變量中的代碼的事件添加和處理我的控件。
string eventName = "Click";
string codeToRun= "MessageBox.Show(\"Hello!\");"
Type tControl = result.GetType();
EventInfo ev = tControl.GetEvent(eventName);
Type tDelegate = ev.EventHandlerType;
MethodInfo addHandler = ev.GetAddMethod();
Type returnType = tDelegate.GetMethod("Invoke").ReturnType;
ParameterInfo[] parameters = tDelegate.GetMethod("Invoke").GetParameters();
Type[] typeParameters = new Type[parameters.Length];
for (int i = 0; i < parameters.Length; i++)
{
typeParameters[i] = parameters[i].ParameterType;
}
DynamicMethod handler = new DynamicMethod(
"",
null,
typeParameters);
//here I need to compile and add my custom source code stored in codeToRun
Delegate dEmitted = handler.CreateDelegate(tDelegate);
addHandler.Invoke(result, new Object[] { dEmitted });
有什麼建議嗎? 預先感謝您的幫助!
好的,我已經根據你的建議簡化了它。 但現在的問題是,我怎麼可以將代碼的主體添加到我想要執行的代碼(存儲在codeToRun中的代碼)?在CSharpCodeProvider的幫助下?我沒有找到這樣的例子。 – kikka 2012-02-10 14:56:58