此问题已被问过很多次,但由于某种原因该解决方案无效。
我正在动态创建一个 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
}
我需要传递一个参数,所以我想到的最简单的方法是:
b.Click += new EventHandler(Method(sender, e, "name"));
protected void Method (object sender, EventArgs e, String name)
{
//Do work here
}
Error: Method name expected
所以在查了这里的题之后,我发现几乎每道题的答案都是一样的。
b.Click += new EventHandler((sender, e) => Method(sender, e, "name"));
Error: A local variable named "sender" cannot be declared in this scope because it would give a different meaning to "sender", which is already used in a 'parent or current' scope to denote something else.
所以我改为:
b.Click += new EventHandler((sender1, e1) => Method(sender1, e1, "name"));
Visual Studio 的错误消失了,但是在运行网页时,我收到了这个错误:
System.ArgumentOutOfRangeException: Index was out of range. Must be a non-negative and less than the size of the collection.
这里有什么问题我真的迷路了。
最佳答案
您将事件处理程序添加到自定义方法的声明是正确的。错误的根源是别的。当您遇到此异常时查看 CallStack 并查看您的错误的实际来源是什么。
关于c# - 将参数传递给 EventHandler 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284742/