111,097
社区成员




private void button1_Click(object sender, EventArgs e)
{
object control = button2;
Type controltype = control.GetType();
EventInfo clickEvent = controltype.GetEvent("Click");
Type[] types = clickEvent.EventHandlerType.GetMethod("Invoke").GetParameters().Select(n => n.ParameterType).ToArray<Type>();
DynamicMethod method = new DynamicMethod("", null,types,controltype);
ILGenerator generator = method.GetILGenerator();
MethodInfo runmethod = typeof(MessageBox).GetMethod("Show", new Type[] { typeof(string) });
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldstr, "This is the Message needed to show!");
generator.Emit(OpCodes.Call, runmethod);
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ret);
//
Delegate del = method.CreateDelegate(clickEvent.EventHandlerType);
clickEvent.GetAddMethod().Invoke(control, new object[] { del });
}
private void button1_Click(object sender, EventArgs e)
{
object control = button2;
Type controltype = control.GetType();
EventInfo clickEvent = controltype.GetEvent("Click");
Type[] types = clickEvent.EventHandlerType.GetMethod("Invoke").GetParameters().Select(n => n.ParameterType).ToArray<Type>();
DynamicMethod method = new DynamicMethod("", null,types,controltype);
ILGenerator generator = method.GetILGenerator();
MethodInfo runmethod = this.GetType().GetMethod("ShowMessage", BindingFlags.Instance | BindingFlags.NonPublic);
//runmethod = typeof(MessageBox).GetMethod("Show", new Type[] { typeof(string) });
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldstr, "This is the Message needed to show!");
generator.Emit(OpCodes.Call, runmethod);
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ret);
//
Delegate del = method.CreateDelegate(clickEvent.EventHandlerType);
clickEvent.GetAddMethod().Invoke(control, new object[] { del });
}
void ShowMessage(string msg)
{
MessageBox.Show(msg, "");
}
private void button1_Click(object sender, EventArgs e)
{
object control = button2;
Type controltype = control.GetType();
EventInfo clickEvent = controltype.GetEvent("Click");
Type[] types = clickEvent.EventHandlerType.GetMethod("Invoke").GetParameters().Select(n => n.ParameterType).ToArray<Type>();
DynamicMethod method = new DynamicMethod("", null,types,controltype);
ILGenerator generator = method.GetILGenerator();
MethodInfo runmethod = this.GetType().GetMethod("ShowMessage", BindingFlags.Instance | BindingFlags.NonPublic);
//runmethod = typeof(MessageBox).GetMethod("Show", new Type[] { typeof(string) });
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldargs_0);
generator.Emit(OpCodes.Ldstr, "This is the Message needed to show!");
generator.Emit(OpCodes.Call, runmethod);
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ret);
//
Delegate del = method.CreateDelegate(clickEvent.EventHandlerType);
clickEvent.GetAddMethod().Invoke(control, new object[] { del });
}
void ShowMessage(string msg)
{
MessageBox.Show(msg, "");
}
虽不明,但觉厉。
void DynamicShowMsg(object control, string eventName)
{
Type controltype = control.GetType();
EventInfo clickEvent = controltype.GetEvent(eventName);
Type[] types = clickEvent.EventHandlerType.GetMethod("Invoke").GetParameters().Select(n => n.ParameterType).ToArray<Type>();
DynamicMethod method = new DynamicMethod("", null, types, controltype);
ILGenerator generator = method.GetILGenerator();
MethodInfo runmethod = typeof(MessageBox).GetMethod("Show", new Type[] { typeof(string) });
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldstr, "This is the Message needed to show!");
generator.Emit(OpCodes.Call, runmethod);
generator.Emit(OpCodes.Pop);
generator.Emit(OpCodes.Ret);
//
Delegate del = method.CreateDelegate(clickEvent.EventHandlerType);
clickEvent.GetAddMethod().Invoke(control, new object[] { del });
}