如何使用控制数组获取 C# 中给定对象的数组索引?
我正在向表单动态添加一堆控件。 每个控件调用相同的方法,在该方法中我需要知道执行该操作的控件的数组索引。
CheckBox[] myCB = new CheckBox[100];
int i;
for (i = 0; i < 100; i++)
{
myCB[i] = new CheckBox();
myCB[i].Text = "Clicky!";
myCB[i].Click += new System.EventHandler(dynamicbutton_Click);
tableLayoutPanel1.Controls.Add(myCB[i]);
}
private void dynamicbutton_Click(Object sender, System.EventArgs e)
{
label1.Text = sender.???array index property???.ToString();
}
因此,如果我单击 myCB[42]
label1
将读取“42” 当然,如果有更简单的方法来处理动态控件,我会很感激指针。
I am dynamically adding a bunch of controls to a form. Each control calls the same method, and in that method I need to know the array index of the the control that performed the action.
CheckBox[] myCB = new CheckBox[100];
int i;
for (i = 0; i < 100; i++)
{
myCB[i] = new CheckBox();
myCB[i].Text = "Clicky!";
myCB[i].Click += new System.EventHandler(dynamicbutton_Click);
tableLayoutPanel1.Controls.Add(myCB[i]);
}
private void dynamicbutton_Click(Object sender, System.EventArgs e)
{
label1.Text = sender.???array index property???.ToString();
}
So if I click myCB[42]
label1
will read "42" Of course, if there is an easier way to handle dynamic controls I'd appreciate pointers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
控件应该有一个 Tag 属性。 也许您可以将索引附加到标签上。 不过你会招致拳击……
Control's should have a Tag property. Maybe you can attach the index to the Tag. You will incur boxing though...
一个明显的解决方案是设置标签:
然后:
另一种替代方法是捕获事件处理程序中的信息,最简单地使用 lambda 表达式或匿名方法:
或者对于更复杂的行为:(
在其中声明
DoSomethingComplicated适当)。
One obvious solution would be to set the tag:
Then:
Another alternative is to capture the information in the event handler, most simply using a lambda expression or anonymous method:
or for more complicated behaviour:
(where you declare
DoSomethingComplicated
appropriately).