繁体   English   中英

如何在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的值发送给进一步处理。 有什么办法吗?

谢谢。

借助闭包和匿名函数,您可以执行类似的操作:

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]);
    };
}

有一个小的“问题”(这不是问题,这是它们的完成方式),因此您一定不能在匿名函数内使用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]);
        }
}

另一种选择是“标记”按钮:

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]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM