2013-03-29 4 views
0

В моем приложении у меня есть массив кнопок, созданных динамически. Я пытаюсь поднять событие onclick для этих кнопок и изменить текст кнопки, которую я нажимаю. Я попробовал приведенный ниже код для это, но его не работает. Как я могу это сделать?. Все предложения?Нажмите событие для динамически созданного массива кнопок

Код:

for (int i = 0; i < 5; i++) 
    { 
     lbl = new Button[5]; 
     lbl[i] = new Button(); 
     lbl[i].Text = "hi"; 
     lbl[i].Width = 30; 
     lbl[i].Click += new EventHandler(lbl_click); 
     //lbl[i].CssClass = "label"; 
     div1.Controls.Add(lbl[i]); 
    } 

Нажмите Event:

protected void lbl_click(object sender, EventArgs e) 
    { 
    Button[] lbl = sender as button[]; 
    lbl[i].Text = "clicked"; 

    } 
+0

Это ваш фактический код? Вы воссоздаете массив кнопок с нуля как в обработчике 'Click', так и на каждой итерации цикла в вашем первом фрагменте кода. (Ваше редактирование только исправило первую проблему.) –

+0

Ах, и ваше редактирование также ввело другую проблему: 'sender' является' Button', а не 'Button []'. –

+0

@ FrédéricHamidi Я попробовал ответ Стиву, он работает в pageload, но не внутри метода. – coder

ответ

4

Вы воссоздание массива кнопок в обработчике событий, но этот массив не заполняются с помощью кнопок, созданных до , Он пуст и даст вам нулевое ссылочное исключение, если вы попытаетесь использовать элемент этого массива (null.Text, он никогда не будет работать).
Вместо этого объект отправителя представляет кнопку, которую пользователь нажал.

protected void lbl_click(object sender, EventArgs e) 
{ 
    Button lbl = sender as Button; 
    lbl.Text = "clicked"; 
} 

Кроме того, если вам нужно знать, какие именно кнопка была нажата, то я предлагаю вам добавить что-то различать между ними во время создания:

Например использовать свойство имя:

Button[] lbl = new Button[5]; 
for(int i = 0; i< 5; i++) 
{ 
    .... 
    lbl[i].Name = "Button_" + i.ToString(); 
    .... 
} 

Обратите внимание, что я переместил объявление массива и инициализацию вне цикла, которые создают каждый отдельный элемент массива (фактическая кнопка).

+0

, если я использую это в pageload его work.but, если я использую его внутри метода, тогда событие не срабатывает. – coder

+0

его работа только, когда я создаю кнопку в pageload .. – coder

+0

Посмотрите на столбец 'Related' справа. Есть множество вопросов по этой проблеме. – Steve

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