c# - 如何将函数绑定(bind)到C#中控件数组中每个控件的Click事件

标签 c# winforms event-handling bind control-array

在 C# 中创建控件数组时,如何将接收单击按钮索引的函数绑定(bind)到其单击事件?

这里有一些代码只是为了更好地理解。在代码顶部的某处定义按钮:

Button [] buttons = new Button[100];

它们的标准 Click 事件如下所示:
private void myClick(object sender, EventArgs e)
{

}

通常你用这种方式绑定(bind)它:
for (int i = 0; i < 100; i++)
    buttons[i].Click += myClick;

但我希望事件处理程序采用这种形式:
private void myClick(int Index)
{

}

我应该如何将点击事件绑定(bind)到带有/不带有临时函数的上述函数?

我考虑过使用委托(delegate),Func<T, TResult>表示法,或者以某种方式传递一个自定义 EventArgs ,其中包含单击按钮的索引;但由于缺乏足够的 C# 知识,我没有成功。

如果你们中的任何人建议将每个控件的索引保存在其标记中:是的,但由于某种原因我不想使用它,因为如果您有一个引发一些事件但没有标记属性什么的,这种方式没用。

最佳答案

int index = i;    
buttons[index].Click += (sender, e) => myClick(index);

正如下面评论中所发布的,由于其范围,使用“i”将对所有控件使用相同的变量。因此,有必要在与 lambda 表达式相同的范围内创建一个新变量。

关于c# - 如何将函数绑定(bind)到C#中控件数组中每个控件的Click事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438858/

相关文章:

c# - 确定数组是否包含重复值的最快方法是什么?

c# - 为什么 InvokeRequired 和 Dispatcher.CheckAccess 的 bool 值颠倒?

c# - Windows Mobile 本地数据库

c# - Windows 窗体中的 Gmail

winforms - C# - 使用列表框添加/删除

c# - 使用箭头键调用方法 C#

c++ - 多重继承和重复函数调用

c# - 给定一个自动化元素,我如何模拟对它的一次左键单击

javascript - 使用 jQuery .on() 绑定(bind)委托(delegate)事件时,直接子级的正确选择器是什么

jquery 点击处理程序