2015-12-14 1 views
0
int h = 100;n=4; 
for (int i = 0; i < n; i++) 
{ 
    Button dybtn = new Button(); 
    dybtn.Location = new Point(80, h); 
    dybtn.Height = 100; 
    dybtn.Width = 100; 
    dybtn.Name = "dybtn"; 
    dybtn.Text = ""; 
    Controls.Add(dybtn); 
    h = h + 100; 
    dybtn.Click += new EventHandler(dybtn_Click); 
} 

private void dybtn_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("Dynamic button is clicked"); 
} 

Я создал четыре динамических кнопки, когда я пишу код обработки событий, все кнопки отвечают на один и тот же код.Как написать код обработчика событий динамической кнопки, используя C#

Мне нужно написать код обработки событий для каждой кнопки индивидуально, используя c# Итак, пожалуйста, дайте мне знать, как написать код обработки событий для каждой кнопки.

+1

Ans, что есть вы пытались это сделать? У вас уже есть код для добавления обработчика событий, который просто работает, какая кнопка, которая через 'h'? Затем назначьте другой обработчик – TheLethalCoder

+1

Почему вы хотите написать код обработки событий для каждой кнопки отдельно? – sachin

+0

@Sachin Скорее всего, попытка написать кнопки рядом друг с другом, которые имеют разные функции, т.е. OP пытается свести к минимуму количество кода для записи, будучи «умным» – TheLethalCoder

ответ

0

В отличие от @TheLethalCoder ответа, я хотел бы предложить вам создать только один обработчик для всех кнопок, а затем использовать опцию h определить различные действия для каждого (или то, что вы имеете в виду)

void dybtn_Click(object sender, EventArgs e) 
{ 
    Button btn = (Button) sender; 
    int h = btn.Location.Y; 

    if (h == 100) 
    { 
     //Mission 1 
    } 
    else if (h == 200) 
    { 
     //Mission 2 
    } 
    //etc... 
} 
+0

Это в основном то, что @Sachin предложил – TheLethalCoder

+0

@ TheLethalCoder Да, я полагаю, но по-другому. больше похоже на ваш –

+0

Я знаю, но если код обработчика событий для каждой кнопки довольно велик, это сделает код более трудным для чтения, очевидно, что можно использовать отдельные методы, но тогда вы можете просто добавить отдельные обработчики событий – TheLethalCoder

0

Расширяясь от моего комментария, единственная разница в каждой кнопке - это y местоположение на форме. Вы отслеживаете это, изменяя значение переменной h. Так что если вы действительно хотите сделать это просто изменить его, чтобы сделать что-то вроде следующего:

if (h == 100) 
{ 
    dybtn.Click += new EventHandler(dybtn_Click1); 
} 
else if (h == 200) 
{ 
    dybtn.Click += new EventHandler(dybtn_Click2); 
} 
//etc... 

Или вы можете сделать то же самое с i переменной, но таким образом, вы можете контролировать обработчик события переходит к которому на основе позиции.

Однако это звучит как плохой дизайн кода, поэтому, если вы просто хотите, чтобы конкретное событие на основе разных кнопок просто выполнялось отдельно.

1

Я предлагаю вам назначать разные имена кнопкам, которые вы создаете динамически, делая что-то вроде dybtn.Name = "dybtn" + i;.

int h = 100;n=4; 
for (int i = 0; i < n; i++) 
{ 
    Button dybtn = new Button(); 
    dybtn.Location = new Point(80, h); 
    dybtn.Height = 100; 
    dybtn.Width = 100; 
    dybtn.Name = "dybtn" + i; 
    dybtn.Text = ""; 
    Controls.Add(dybtn); 
    h = h + 100; 
    dybtn.Click += new EventHandler(dybtn_Click); 
} 

Затем в коде обработчика событий, проверьте имя кнопки и выполнить код в зависимости от того, что с помощью Switch..Case или If..Else.

+0

Если код в обработчиках событий довольно велик, это просто усложнит чтение, я бы предостерег, чтобы назначить обработчик сначала, а затем отдельные на кнопку – TheLethalCoder

Смежные вопросы