事件参数分配

3

我有这个事件处理程序:

Temp.MouseLeftButtonDown += new MouseButtonEventHandler(Temp_MouseLeftButtonDown);

但是我想要传递一些参数到Temp_MouseLeftButtonDown函数中以便访问。我该如何分配它?

1个回答

5

您不能直接这样做,因为事件处理程序只能期望与MouseButtonEventHandler兼容的签名。

如果您正在使用C# 3,则最简单的方法是使用lambda表达式 - 类似于:

Temp.MouseLeftButtonDown +=
   (sender, args) => Temp_MouseLeftButtonDown(sender, args, "extra argument");

这有帮助吗?当然,如果您不需要发送方和事件参数,您不必提供它们。

在C# 2中,您可以以同样的方式使用匿名方法。


有人能说出想要在处理程序中拥有额外参数的几个好理由吗?谢谢! - VoodooChild
@VoodooChild:你可能想在不同的地方使用大部分相同的逻辑,但有一些变化。 - Jon Skeet
谢谢,它像魅力一样运行(Y) @VoodooChild:我的情况是在运行时创建按钮,每个按钮都有不同的值,我想处理这个值,所以我想为每个按钮的每个方法传递这个值。只是一个评论,当我尝试使用我的循环i值传递值时,我遇到了错误,但当我将值放入变量中,然后传递这个变量时,它就可以正常工作了。例如: double value = Positions[i].AdPosition; Temp.MouseLeftButtonDown += (sender, args) => TempBreak_MouseLeftButtonDown(value); - Miroo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接