将参数传递给EventHandler中的方法

Ali*_*sam 5 c# asp.net arguments button event-handling

这个问题已被多次询问,但解决方案由于某种原因无法正常工作.

我正在动态创建一个Button并为其分配一个EventHandler.

protected void Page_Load (object sender, EventArgs e)
{
    Button b = new Button();
    b.Click += new EventHandler(Method);
}

protected void Method (object sender, EventArgs e)
{
   //Do work here
}
Run Code Online (Sandbox Code Playgroud)

我需要传递一个参数,所以我想到的最简单的方法是:

b.Click += new EventHandler(Method(sender, e, "name"));

protected void Method (object sender, EventArgs e, String name)
{
   //Do work here
}
Run Code Online (Sandbox Code Playgroud)

错误:预期的方法名称

所以在检查了这里的问题后,我几乎在每个问题中都找到了相同的解决方案.

b.Click += new EventHandler((sender, e) => Method(sender, e, "name"));
Run Code Online (Sandbox Code Playgroud)

错误:无法在此范围内声明名为"sender"的局部变量,因为它将赋予"sender"不同的含义,"sender"已在"父或当前"范围中用于表示其他内容.

所以我改为以下内容:

b.Click += new EventHandler((sender1, e1) => Method(sender1, e1, "name"));
Run Code Online (Sandbox Code Playgroud)

Visual Studio的错误消失了,但是在运行网页时,我收到了这个错误:

System.ArgumentOutOfRangeException:索引超出范围.必须是非负数且小于集合的大小.

这里有什么问题我真的输了.

ven*_*mit 2

您将 Eventhandler 添加到自定义方法的声明是正确的。错误的根源是别的东西。当您收到此异常时,请查看CallStack ,看看错误的实际来源是什么。