我找不到类似于我期望发生的解决方案。如何在我想订阅的方法中添加其他参数?
假设下面的这一行是订阅鼠标悬停的代码:
Panel cagePanel = new Panel();
cagePanel.MouseHover += new EventHandler(frmMain_MouseHover);
void frmMain_MouseHover(object sender, EventArgs e){
// I wanna add some 'int index' parameter after 'e' variable)
}
我真正想要的是这样:
void frmMain_MouseHover(object sender, EventArgs e, int index){
strings[index] = "bla bla bla";
}
答案 0 :(得分:2)
我找不到类似于我期望发生的解决方案。如何在我想订阅的方法中添加其他参数?
你做不到。代码如何提升事件(Panel.OnMouseHover
或其他什么)知道要提供什么值?
如果您在订阅事件时知道,您可以使用lambda表达式基本上委派调用,提供额外信息:
// 10 is just an example here - use whatever value you want for index
cagePanel.MouseHover += (sender, args) => frmMain_MouseHover(sender, args, 10);
编辑:要遍历数组中的每个控件并为每个控件订阅一个合适的处理程序,您可以使用以下内容:
for (int i = 0; i < array.Length; i++)
{
// See http://tinyurl.com/3b2hoft for reasons behind the copy
int index = i;
array[i].MouseHover += (s, args) => frmMain_MouseHover(s, args, index);
}
我个人会尽量避免需要这样做,但是 - 您是否可以通过sender
部分检测索引,可能使用Array.IndexOf
?
答案 1 :(得分:2)
您不能,但如果您需要的额外数据与发送事件的内容相关,则可以使用sender
值。例如,如果您想知道引发事件的项目的控件列表中的索引,您可以执行以下操作:
int i = controlList.IndexOf(sender);