事件处理器
public void DeliverEvent(object sender, EventArgs e)
{
}
#1:这行得通
public void StartListening(Button source)
{
source.Click += DeliverEvent;
}
#2:这也是..
public void StartListening(EventHandler eventHandler)
{
eventHandler += DeliverEvent;
}
但是在#2 中,你不能调用这个方法,因为如果你尝试这样的事情:
StartListening(button.Click);
你得到这个错误:
“System.Windows.Forms.Control.Click”事件只能出现在 += 或 -= 的左侧
有什么办法可以解决这个错误吗?我希望能够将事件而不是包含事件的对象传递给 StartListening
方法。
最佳答案
您正在将事件与委托(delegate)混合在一起。您可能应该阅读 this Jon Skeet 的文章将解释两者之间的区别。
第二个选项不起作用的原因是因为该方法需要一个参数,该参数是一个符合 EventHandler
签名的委托(delegate)。Button.Click
指的是一个事件而不是委托(delegate)。事件只是封装委托(delegate)。
我不确定您正在尝试的事情是否可以完成。从概念上讲,您想做的事情实际上没有意义;您要传递的是处理程序 的逻辑,而不是事件 本身。
看看this帖子着眼于一些模拟您想要的效果的方法。
关于c# - 如何将事件传递给方法然后订阅它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445285/