Мне нужна небольшая помощь!Добавить обработчик события во время выполнения к элементу управления, где исходный код тела хранится в переменной
Я создаю пользовательский контроль во время выполнения, десериализуя 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