Я использую Оборот WinSplit для возможности расположения клавиатуры, и я использую bblean в качестве замены для Проводника. Это имеет несколько возможностей рабочей области, созданных прямо в, и это позволяет Вам настраивать его точно, как Вы хотите, чтобы он посмотрел.
Это то, о чем говорит Ник, - это два ваших варианта (вы сможете запустить этот код и увидеть оба варианта ):
public Form1()
{
InitializeComponent();
for (int i = 0; i < 5; i++)
{
Button button = new Button();
button.Location = new Point(20, 30 * i + 10);
switch (i)
{
case 0:
button.Click += new EventHandler(ButtonClick);
break;
case 1:
button.Click += new EventHandler(ButtonClick2);
break;
//...
}
this.Controls.Add(button);
}
for (int i = 0; i < 5; i++)
{
Button button = new Button();
button.Location = new Point(160, 30 * i + 10);
button.Click += new EventHandler(ButtonClickOneEvent);
button.Tag = i;
this.Controls.Add(button);
}
}
void ButtonClick(object sender, EventArgs e)
{
// First Button Clicked
}
void ButtonClick2(object sender, EventArgs e)
{
// Second Button Clicked
}
void ButtonClickOneEvent(object sender, EventArgs e)
{
Button button = sender as Button;
if (button != null)
{
// now you know the button that was clicked
switch ((int)button.Tag)
{
case 0:
// First Button Clicked
break;
case 1:
// Second Button Clicked
break;
// ...
}
}
}
Полагаю, вы в петле и делаете что-то вроде этого?
Button newButton = new Button();
newButton.Click += new EventHandler(newButton_Clicked);
Вы регистрируете один и тот же метод для всех кнопок. Вам понадобятся индивидуальные методы для каждой кнопки. В качестве альтернативы вы можете назначить каждой кнопке отдельное свойство идентификации и в своем обработчике проверить, какая кнопка была отправителем.
Оттуда вы можете предпринять соответствующие действия.
Угадайте, что вы могли пробовать: Да, все кнопки запускают свои события в один и тот же метод, но параметр отправитель
вашего метода обратного вызова содержит ссылку на кнопку что фактически вызвало конкретное событие.