为自定义表单控件绑定EventHandler
本文关键字:绑定 EventHandler 控件 表单 自定义 | 更新日期: 2023-09-27 18:05:16
我试图将事件绑定到自定义表单类中创建的表单元素。对于如何绑定存在于类FormLoader (UserControl文件)上的方法,我非常无能为力。例:
public class FormBuilder
{
public Control Create(){
//create form controls here... for each control call AddEvent.
}
void AddEvent(object o, string eventname, string methodname)
{
EventInfo ei = o.GetType().GetEvent(eventname);
MethodInfo mi = typeof (FormLoader).GetMethod(methodname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Default);
Delegate del = Delegate.CreateDelegate(ei.EventHandlerType, typeof (FormLoader), mi);
ei.AddEventHandler(o, del);
}}
这是我如何实例化我的表单。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Form = new Form();
Controls.Add(Form.Create());
}
public void ProcessEventAction(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(@"Control Internal Hit");
}
我得到"错误绑定到目标方法。"任何想法我可以绑定的方法,存在于作用域之外的事件?
没有以Type, Type, MethodInfo
为参数的Delegate.CreateDelegate
重载。因此,调用Delegate.CreateDelegate(Type, Object, MethodInfo)
过载,传递typeof(FormLoader)
作为第一个参数。
由于传入的MethodInfo
没有在Type
类上定义,因此它不能绑定到Type
实例。
您需要传递FormLoader
类的实例作为CreateDelegate
方法的第二个参数。假设您不想为每个事件使用一个新实例,则需要将实例传递给AddEvent
方法。