我想创建一个方法,将事件作为参数并向其添加 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);
是否可以?
我注意到这段代码工作正常,然后返回到我的项目,并注意到当我传递在我的类中声明的事件时,它可以工作,但是当我从其他类传递事件时,它仍然不起作用。
我得到的是这个错误:
事件
'System.Windows.Forms.ToolStripItem.Click'
只能出现在左侧
+= 或 -=
我最初的答案适合在定义事件的类中使用,但是您已经更新了您的问题以反映您希望从定义类之外完成此操作,所以我已经解决了这个问题。
只有定义事件的类才能引用事件使用的隐式委托变量。从该类之外,您只能访问add
and remove
方法,通过+=
and -=
。这意味着您无法直接执行您所要求的操作。但是,您可以使用函数式方法。
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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)