将额外的参数从eventHandler传递给C#中的void

时间:2019-04-15 11:21:42

标签: c# .net

这是我的代码:

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
   i = .../
   uc[i].PreviewMouseDown += new MouseButtonEventHandler(UCClick(sender, e, i));
}



private void UCClick(object sender, RoutedEventArgs e, int i)
{
    MessageBox.Show(i);
}

iPage_Loaded无效的变量。我只想在UCClick中使用它,但出现以下错误:

  

需要使用方法名称!

我是C#的新手,对此我不理解。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用lambda表达式:

uc[i].PreviewMouseDown += (sender, e) => UCClick(sender, e, i);

如果需要,您可以添加new MouseButtonEventHandler,但这毫无意义,因为编译器会为您插入它。

请参见docs on anonymous functions

没有必要添加例如new MouseButtonEventHandler订阅事件-编译器会自动为您插入。例如,这两行做相同的事情:

something.PreviewMouseDown += SomeHandler;
something.PreviewMouseDown += new MouseButtonEventHandler(SomeHandler);