powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Добавление события для контрола по его имени
6 сообщений из 6, страница 1 из 1
Добавление события для контрола по его имени
    #37780763
noname-tier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Появилась такая задача:
При программной генерации контролов необходимо добавить к контролу событие по его имени.
Чую что надо через reflection, но не могу сообразить как.
Код: c#
1.
Btn.Click += ???
...
Рейтинг: 0 / 0
Добавление события для контрола по его имени
    #37781137
noname-tier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение, может кому пригодится:
Код: c#
1.
2.
var method = GetType().GetMethod("BtnClick");          
Btn.Click += (EventHandler) Delegate.CreateDelegate(typeof (EventHandler),this, method);
...
Рейтинг: 0 / 0
Добавление события для контрола по его имени
    #37781270
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noname-tier, чем Btn.Click += BtnClick; не подходит?
...
Рейтинг: 0 / 0
Добавление события для контрола по его имени
    #37781831
noname-tier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо было добавлять метод по данным, хранящимся в базе и тут мне видится только два варианта: либо через switch case
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var event="BtnClick";
 switch (event)
            {
                case "BtnClick":
                    Btn.Click += BtnClick;
                    break;
                case "Btn1Click":
                    Btn.Click += Btn1Click;
                    break;
              }


либо приведенный выше. Приведенный выше мне кажется более удобным, так как нет жесткой превязки данных к коду.
...
Рейтинг: 0 / 0
Добавление события для контрола по его имени
    #37781995
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noname-tierПриведенный выше мне кажется более удобным, так как нет жесткой превязки данных к коду.
Привязка в коду тебе и так понадобится т.к. несуществующий метод-обработчик добавить к событию очеидно не получится. Вместо же switch можно сделать Dictionary<string, EventHandler>. Примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
private static Dictionary<string, EventHandler> _eventNameToHandler = new Dictionary<string, EventHandler>();
...
_eventNameToHandler.Add("BtnClick", BtnClick);
_eventNameToHandler.Add("Btn1Click", Btn1Click);
...
string eventName = "BtnClick";
Btn.Click += _eventNameToHandler[eventName];


Такой метод (также как и вариант со switch), в отличии от варианта с рефлексией, добавляет проверку со стороны компиляторы что методы существуют и их сигнатура соответствует делегату.

Кроме того никто не мешает скомбинироватть оба метода на случай если в БД будет новый метод, который суещствует в коде, но не был добавлен в dictionary.
...
Рейтинг: 0 / 0
Добавление события для контрола по его имени
    #37782096
noname-tier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О такоем варианте я не подумал, спасибо :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Добавление события для контрола по его имени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]