Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Gamabunta
33 / 33 / 16
Регистрация: 23.08.2016
Сообщений: 116
1

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

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

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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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) { ...

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

8
OwenGlendower
Супер-модератор
Эксперт .NET
10765 / 9189 / 3915
Регистрация: 17.03.2014
Сообщений: 18,378
Записей в блоге: 1
Завершенные тесты: 2
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
Gamabunta
33 / 33 / 16
Регистрация: 23.08.2016
Сообщений: 116
25.09.2016, 15:49  [ТС] 3
OwenGlendower
Попробовал, даже прогнал дебаггером, событие вообще не достигается, ButtonList.Сount остаётся прежним
0
Cupko
481 / 467 / 130
Регистрация: 17.07.2012
Сообщений: 1,384
Записей в блоге: 1
Завершенные тесты: 2
25.09.2016, 18:10 4
а) Я так полагаю, вместо sender должен быть s, нет?
b) RemoveAt по индексу удаляет, а не по ID. У вас точно индекс с ID совпадает?
0
25.09.2016, 18:10
Gamabunta
33 / 33 / 16
Регистрация: 23.08.2016
Сообщений: 116
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
insite2012
Модератор
Эксперт .NET
4886 / 3838 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
25.09.2016, 20:01 6
Gamabunta, я в ASP.NET не особо силен, но помню из начальных глав, что конвейер ASP.NET работает немного не так, как мы привыкли в настольных приложениях, и вполне возможно, что эта проблема возникает именно из-за этого.
И именно это касается динамических контролов.
0
Gamabunta
33 / 33 / 16
Регистрация: 23.08.2016
Сообщений: 116
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
insite2012
Модератор
Эксперт .NET
4886 / 3838 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
25.09.2016, 20:13 8
Лучший ответ Сообщение было отмечено Gamabunta как решение

Решение

Цитата Сообщение от Gamabunta Посмотреть сообщение
Так и есть
Ну да, я читал об этом.
Вам надо создавать контролы и подписку в событии Page_Load, насколько я помню.
1
Gamabunta
33 / 33 / 16
Регистрация: 23.08.2016
Сообщений: 116
25.09.2016, 20:46  [ТС] 9
insite2012
Я пошёл другим путём и переопределил LoadViewState, но через Page_Load будет даже проще
0
25.09.2016, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2016, 20:46

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru