C# 使用附加参数附加事件处理

标签 c# winforms event-handling action

前言

我有一个 Windows 窗体按钮,它公开事件 OnClick(对象发送者,EventArgs e)。 在我的应用程序中,我可以使用 C# 的经典事件处理技术来处理这个问题:

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

然后 Windows Form 要求我提供具有以下签名的处理程序:

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 表达式分配给局部变量或字段。

例如:

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

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

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

关于C# 使用附加参数附加事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608689/

相关文章:

c# - 如何跟踪 datagridview 单元格中的旧值?

c# - 从 xml 文件加载图像数据

c# - 如何在 Windows 窗体设计器中保存用户控件的结构属性?

c# - 如何在没有第三方库的情况下在 04 :00 every day in ASP . NET MVC 5.1 安排方法调用?

c# - TFS 2010 : Is it possible to use a list of key value pairs in the ProcessParameterMetadataCollection?

c# - RichtextBox 加粗

c# - 在 .NET/C# 中完成事件后运行操作

jqueryMobile 水龙头和冒泡/传播

c# - 在 C# 中处理 ListView 上的滚动事件

c# - GridView 不显示所有行