C# 动态分配的事件处理程序上的自定义事件参数
我正在分配一个单击事件处理程序,如下所示C# 动态分配的事件处理程序上的自定义事件参数,c#,reflection,delegates,C#,Reflection,Delegates,我正在分配一个单击事件处理程序,如下所示 var buttonEvent = button.GetType().GetEvent("Click"); var eventMethod = GetType().GetMethod("button_Click"); var handler = Delegate.CreateDelegate(buttonEvent.EventHandlerType, this, eventMethod); buttonEvent.AddEventHandler(bu
var buttonEvent = button.GetType().GetEvent("Click");
var eventMethod = GetType().GetMethod("button_Click");
var handler = Delegate.CreateDelegate(buttonEvent.EventHandlerType, this, eventMethod);
buttonEvent.AddEventHandler(button, handler);
单击事件处理程序如下所示:
void button_Click(object sender, EventArgs e) { }
如何将自定义参数传递给处理程序?理想情况下,我很乐意
void button_Click(object sender, MyCustomEventArgs e) { }
在这里,我可以在分配事件时设置MyCustomEventArgs。简单明了,您不能
按钮
类调用该事件,当调用该事件时,它填充参数。在这种情况下,使用EventArgs
对象(不允许自定义数据)
这对任何事件都适用。除非引发事件的类支持某种方式将自定义数据插入事件流,否则您无法控制它通过事件处理程序提供的内容
请注意,UI事件处理程序有一个巧妙的技巧。由于发送对象保存在“sender”中,并且您可以将任何内容放入“Tag”属性中,因此您可以通过执行以下操作在事件中拥有自定义数据:
control.Tag = someObject;
control.Click += (o, e) =>
{
Control c = o as Control;
MyObject data = c.Tag as MyObject;
//use data
};
此外,在WPF中,您可以使用
CommandParameter
执行此操作,因为它也是一个通用对象。当然,这不是事件处理程序,但它仍然是相同的总体思路。简单明了,你不能
按钮
类调用该事件,当调用该事件时,它填充参数。在这种情况下,使用EventArgs
对象(不允许自定义数据)
这对任何事件都适用。除非引发事件的类支持某种方式将自定义数据插入事件流,否则您无法控制它通过事件处理程序提供的内容
请注意,UI事件处理程序有一个巧妙的技巧。由于发送对象保存在“sender”中,并且您可以将任何内容放入“Tag”属性中,因此您可以通过执行以下操作在事件中拥有自定义数据:
control.Tag = someObject;
control.Click += (o, e) =>
{
Control c = o as Control;
MyObject data = c.Tag as MyObject;
//use data
};
此外,在WPF中,您可以使用
CommandParameter
执行此操作,因为它也是一个通用对象。当然,这不是事件处理程序,但它仍然是相同的一般概念。您学习过继承吗?我知道MyCustomEventArgs
将扩展EventArgs
。我只是不知道在你的MyCustomButton
中,在哪里/如何放置任何东西,它扩展了按钮
,覆盖onClick方法不太可行。必须有另一种方法,但这仍然不能解释我是如何填充MyCustomEventArgs的。您学习继承了吗?我知道MyCustomEventArgs
将扩展EventArgs
。我只是不知道在你的MyCustomButton
中,在哪里/如何放置任何东西,它扩展了按钮
,覆盖onClick方法不太可行。必须有另一种方法,但这仍然不能解释我是如何填充MyCustomEventArgs的