Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
35 / 35 / 16
Регистрация: 23.08.2016
Сообщений: 118
1

Не срабатывает лямбда-событие нажатия динамической кнопки

25.09.2016, 13:53. Показов 1391. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
protected void Button0_Click(object sender, EventArgs e)
{
    ButtonList.Add(new Button());
    ButtonList[NextButNum].ID = NextButNum.ToString();
    ButtonList[NextButNum].Text = "Нажми меня";
//Не срабатывает это событие
    ButtonList[NextButNum].Click += (s, e) =>
    {
        ButtonList.RemoveAt(Convert.ToInt16(((Button)sender).ID));
    };
    num++;
}
Подскажите в чём ошибка, заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2016, 13:53
Ответы с готовыми решениями:

Не срабатывает событие кнопки
Что делать не знаю в гугле много вариантов нашел но не могу не как понять как зафиксить ошибку. ...

Событие нажатия кнопки на USB наушниках
История: Имеются наушники Platronics 628 USB. Пока были новые, кнопка "Выключить/включить микрофон"...

Как отловить событие обновления? (нажатия кнопки F5)
How to catch event when user press 'Refresh' button(or F5)? Any help ,please Thanks in...

Не срабатывает событие нажатия кнопки
Привет, private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) { ...

8
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,370
Записей в блоге: 1
25.09.2016, 15:34 2
Gamabunta, попробуй так:
C#
1
2
3
4
5
6
7
8
9
protected void Button0_Click(object sender, EventArgs e)
{
    var btn = new Button { Text = "Нажми меня" };
    btn.Click += (s, e) =>
    {
        ButtonList.Remove((Button)sender);
    };
    ButtonList.Add(btn);
}
0
35 / 35 / 16
Регистрация: 23.08.2016
Сообщений: 118
25.09.2016, 15:49  [ТС] 3
OwenGlendower
Попробовал, даже прогнал дебаггером, событие вообще не достигается, ButtonList.Сount остаётся прежним
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
25.09.2016, 18:10 4
а) Я так полагаю, вместо sender должен быть s, нет?
b) RemoveAt по индексу удаляет, а не по ID. У вас точно индекс с ID совпадает?
0
35 / 35 / 16
Регистрация: 23.08.2016
Сообщений: 118
25.09.2016, 18:35  [ТС] 5
Cupko
a) Вы правы
b) Всё верно, если вешаю на статическую кнопку - срабатывает.
Попробовал для проверки события так:
C#
1
2
3
4
5
ButtonList.Add(new Button { Text = "Нажми меня", ID = num.ToString() });
ButtonList[num].Click += (s, e) =>
{
    Label1.Text = "Event has taken place!";
};
Не сработало
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
25.09.2016, 20:01 6
Gamabunta, я в ASP.NET не особо силен, но помню из начальных глав, что конвейер ASP.NET работает немного не так, как мы привыкли в настольных приложениях, и вполне возможно, что эта проблема возникает именно из-за этого.
И именно это касается динамических контролов.
0
35 / 35 / 16
Регистрация: 23.08.2016
Сообщений: 118
25.09.2016, 20:09  [ТС] 7
insite2012
Так и есть, вот что нашёл:
This is a timing issue:
Page_Load is executed, page is rendered.
Dropdown is selected. Post back is send to the server. Page_Load is executed. Then the event is send to your dropdown instance. SelectedIndexChanged is executed. Your button is created and the page is rendered and send to the client.
Button is pushed. Post back is send to the server. Page_Load is executed. Asp tries to execute the event, but the button does not exist anymore. So the event is ignored.
If you're dynamically creating controls in WebForms, you always have to recreate them on every postback and before the ViewState is loaded
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
25.09.2016, 20:13 8
Лучший ответ Сообщение было отмечено Gamabunta как решение

Решение

Цитата Сообщение от Gamabunta Посмотреть сообщение
Так и есть
Ну да, я читал об этом.
Вам надо создавать контролы и подписку в событии Page_Load, насколько я помню.
1
35 / 35 / 16
Регистрация: 23.08.2016
Сообщений: 118
25.09.2016, 20:46  [ТС] 9
insite2012
Я пошёл другим путём и переопределил LoadViewState, но через Page_Load будет даже проще
0
25.09.2016, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2016, 20:46
Помогаю со студенческими работами здесь

Не срабатывает событие нажатия на ImageButton в Gridview
Пример с офф сайта брала, почему то не работает import android.content.Intent; import...

Как из обработчика Form1_KeyPress вызвать событие для нажатия заданной по имени кнопки на форме (кнопки 0-9)
Пишу калькулятор. Есть несколько кнопок (Button) с цифрами и знаками. Для цифр имена кнопок:...

Событие нажатия клавиши не срабатывает, если добавить элементы на форму
Всем привет. Нужен совет в какую сторону смотреть. Есть форма. На ней нужно отлавливать нажатие...

Не срабатывает обработчик нажатия кнопки
<ul> <li><button id="about_me" onckick="change()">About me</button></li> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru