【问题标题】:C# attach event handling with additional parametersC# 使用附加参数附加事件处理
【发布时间】:2011-01-05 20:07:20
【问题描述】:

前言

我有一个 Windows 窗体按钮,它公开事件 OnClick(对象发送者,EventArgs e)。 在我的应用程序中,我可以使用 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 事件以及使用额外的 Action 作为参数。所以我想写这样的东西:

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

我能以某种方式做到吗?

【问题讨论】:

  • 既然您已经有了解决方案,为什么还要经历所有这些?如果您需要取消订阅,请不要使用 lambda,很简单。
  • 你根本没有回答问题...

标签: c# winforms event-handling action


【解决方案1】:

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

例如:

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

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

如果您想在处理程序中取消订阅,您需要将 handler 分配给 null,然后分配给 lambda,以避免明确的分配问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多