如何在 EventHandler 中添加参数
How to add parameters in EventHandler
这就是我想要做的:
....
for(i=0;i<=99;i++)
{
btn[i].Click += new EventHandler(btn_Clicked,i);
}
}
private void btn_Clicked(object sender, EventArgs e,int i)
{
compute((Button)sender, picRetrieved[i]);
}
请帮忙。它显示错误。但是,我想发送 i 的值以进行进一步处理。有什么办法吗?
谢谢。
感谢 closures 和匿名函数,您可以做类似的事情:
for(int i=0;i<=99;i++)
{
int j = i;
btn[i].Click += (sender, e) =>
{
// Very important! Here use only j, not i!
compute((Button)sender, picRetrieved[j]);
};
}
有一个小 "problem"(这不是问题,它们是如何完成的)因此您不能在匿名函数中使用 i
变量,但是如果您将它复制到其他地方(例如 j
)然后你就可以使用 j
。
你不能。事件处理程序的签名是固定的,不能更改。
在这种情况下,您可以使用匿名委托来获得您想要的。
for(i = 0; i <= 99; i++)
{
int dummy = i;
btn[i].Click += delegate(object sender, EventArgs e)
{
compute(btn[dummy], picRetrieved[dummy]);
}
}
另一种选择是'tag'按钮:
for(i = 0; i <= 99; i++)
{
btn[i].Click += btn_Clicked;
btn[i].Tag = i;
}
private void btn_Clicked(object sender, EventArgs e,int i)
{
Button b = (Button)sender;
int i = (int)b.Tag;
compute(b, picRetrieved[i]);
}
这就是我想要做的:
....
for(i=0;i<=99;i++)
{
btn[i].Click += new EventHandler(btn_Clicked,i);
}
}
private void btn_Clicked(object sender, EventArgs e,int i)
{
compute((Button)sender, picRetrieved[i]);
}
请帮忙。它显示错误。但是,我想发送 i 的值以进行进一步处理。有什么办法吗?
谢谢。
感谢 closures 和匿名函数,您可以做类似的事情:
for(int i=0;i<=99;i++)
{
int j = i;
btn[i].Click += (sender, e) =>
{
// Very important! Here use only j, not i!
compute((Button)sender, picRetrieved[j]);
};
}
有一个小 "problem"(这不是问题,它们是如何完成的)因此您不能在匿名函数中使用 i
变量,但是如果您将它复制到其他地方(例如 j
)然后你就可以使用 j
。
你不能。事件处理程序的签名是固定的,不能更改。
在这种情况下,您可以使用匿名委托来获得您想要的。
for(i = 0; i <= 99; i++)
{
int dummy = i;
btn[i].Click += delegate(object sender, EventArgs e)
{
compute(btn[dummy], picRetrieved[dummy]);
}
}
另一种选择是'tag'按钮:
for(i = 0; i <= 99; i++)
{
btn[i].Click += btn_Clicked;
btn[i].Tag = i;
}
private void btn_Clicked(object sender, EventArgs e,int i)
{
Button b = (Button)sender;
int i = (int)b.Tag;
compute(b, picRetrieved[i]);
}