在VB6中,您可以使用索引为控件命名。
例如:cmdStartInterval(1), cmdStartInterval(2), ... .
然后您会有一个类似于这样的方法头:
Private Sub cmdStartInterval_Click(Index As Integer)
...
End Sub
在C#中是否也有类似的方法实现呢?
在VB6中,您可以使用索引为控件命名。
例如:cmdStartInterval(1), cmdStartInterval(2), ... .
然后您会有一个类似于这样的方法头:
Private Sub cmdStartInterval_Click(Index As Integer)
...
End Sub
protected void cmdButtons_Click(object sender, System.EventArgs e)
等价于使用控件数组。您将需要手动添加事件中的索引。如果您不需要索引,可以将事件分配给控件。
一个缺点是,无论是C#还是VB.NET:您不能使用设计器创建索引控件,您必须手动创建它们。
好处是:这为您提供了更多自由。
编辑:
这就是它看起来的样子:
// in your Form_Init:
Button [] buttons = new Button[10]; // create the array of button controls
for(int i = 0; i < buttons.Length; i++)
{
buttons[i].Click += new EventHandler(btn_Click);
buttons[i].Tag = i; // Tag is an object, not a string as it was in VB6
// a step often forgotten: add them to the form
this.Controls.Add(buttons[i]); // don't forget to give it a location and visibility
}
// the event:
void btn_Click(object sender, EventArgs e)
{
// do your thing here, use the Tag as index:
int index = (int) ((Button)sender).Tag;
throw new NotImplementedException();
}
注意:如果你使用表单设计器,每个按钮将有自己的名称。如果像另一位用户建议的那样,为它们都使用相同的处理程序(如在VB6中所做的),你将不能轻松地通过索引区分控件,就像你过去常做的那样。为了克服这个问题,只需使用"标记"字段即可。通常最好不要使用名称字段,因为这会创建一个你不想要的依赖关系。
form_init
中初始化它,如果您编写代码,则它会自动找到您的控件。无论采取什么方法,都不可能再给对象相同的名称,因此无论如何,都需要更多的工作量(尽管看起来很奇怪,但可以提供更多的灵活性)。这里是微软的建议及代码。 - Abel