Эквивалент - использовать массивы элементов управления. Вам нужно будет добавить указатель в событие вручную. Если вам не нужен индекс, вы можете просто назначить события элементам управления.
Недостатком является как для C #, так и для VB.NET: вы не можете создавать индексированные элементы управления с конструктором, вы должны создавать их вручную.
Преимущество: это дает вам больше свободы.
EDIT:
Вот как это выглядит:
// 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();
}
PS: если вы используете дизайнер форм, у каждой кнопки будет свое имя. Если вы делаете так, как предложил другой пользователь, то есть используете один и тот же обработчик для всех них (как вы могли бы сделать и в VB6), вы не можете легко отличить элементы управления по индексу, как вы это делали раньше. Чтобы преодолеть это, просто используйте поле Tag. Обычно лучше использовать , а не поле Имя для этого, так как это создает зависимость, которую вы не хотите.