我想创建一个方法,将事件作为参数并向其添加 eventHandler 以正确处理它。像这样:
我有两个事件:
public event EventHandler Click;
public event EventHandler Click2;
现在我想像这样(伪代码)将特定事件传递给我的方法:
public AttachToHandleEvent(EventHandler MyEvent)
{
MyEvent += Item_Click;
}
private void Item_Click(object sender, EventArgs e)
{
MessageBox.Show("lalala");
}
ToolStripMenuItem tool = new ToolStripMenuItem();
AttachToHandleEvent(tool.Click);
这可能吗?
我注意到这段代码运行良好,并返回到我的项目并注意到当我传递一个在我的类中声明的事件时,它起作用了,但是当我传递来自其他类的事件时它仍然不起作用。
我得到的是这个错误:
The event 'System.Windows.Forms.ToolStripItem.Click' can only appear on the left hand side of += or -=
最佳答案
我的原始答案适用于定义事件的类中,但你已经更新了你的问题以反射(reflect)你希望从定义类之外完成这个,所以我已经解决了。
只有定义事件的类才能引用事件使用的隐式委托(delegate)变量。在该类之外,您只能通过 +=
和 -=
访问 add
和 remove
方法.这意味着您不能直接执行您要求的操作。但是,您可以使用函数式方法。
class A{
public event EventHandler Event1;
public void TriggerEvent1(){
if(Event1 != null)
Event1(this, EventArgs.Empty);
}
}
class B{
static void HandleEvent(object o, EventArgs e){
Console.WriteLine("Woo-hoo!");
}
static void AttachToEvent(Action<EventHandler> attach){
attach(HandleEvent);
}
static void Main(){
A a = new A();
AttachToEvent(handler=>a.Event1 += handler);
a.TriggerEvent1();
}
}
关于c# - 如何将事件传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560258/