2011-01-05 70 views
1

前言C#附着事件处理与附加参数

我有暴露事件的OnClick(对象发件人,EventArgs的)一个视窗形式按钮。 在我的应用程序可以通过使用经典的事件处理的C#技术处理这个问题:

// Button Creation 
Button button = new Button(); 
button.Click += MyEventHandler; 

然后Windows窗体问我有以下签名的处理程序:

public void MyEventHandler(object sender, EventArgs e) { } 

假设我想使用lambda表达式要做到这一点,我可以使用以下语法:

button.Click += (sender, args) => 
{ 
    // execute the code 
}; 

这样做的缺点是,我不能从Lambda表达式退订。

问题

我想要做的是有一个实用工具类,让我来处理任何Click事件加上使用额外的行动作为参数。所以我想写这样的东西:

button.Click += MyUtility.Click(() 
    => { 
     // the custom code the Click event will execute 
    }) 

我可以做到这一点吗?

+2

当你已经有解决方案时,为什么要经历所有这些?如果您需要取消订阅,请不要使用lambda表达式,很简单。 – 2011-01-05 20:12:02

+0

你根本没有回答这个问题... – Raffaeu 2011-01-05 20:14:16

回答

4

您可以将lambda表达式分配给本地变量或字段。

例如:

EventHandler handler = (sender, args) => 
{ 
    // execute the code 
}; 

button.Click += handler; 
button.Click -= handler; 

如果你想在处理器中退订,你需要分配给handlernull,然后到拉姆达,避免明确分配的问题。

+0

好点!谢谢 – Raffaeu 2011-01-05 20:14:56