Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить все события ? Как удалить все события ? 
V
    Опции темы
andrx
Дата 11.1.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



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

можно что-то наподобии этого :
Код

foreach ( Control control in this.Controls )
{
     // отключить каждую кнопку
     control.Enabled = false;
     control.Click -= new EventHandler( <НАЗВАНИЕ МЕТОДА> );
}

но как тогда узнать количество добавленных обработчиков и какие это обработчики ?


Или может проще удалить и заново создать объект(ы) для которого(ых) необходимо "почистить" свойство ?

заранее благодарен за любую полезную информацию smile
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
dronzo
Дата 11.1.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.11.2005
Где: Москва

Репутация: 6
Всего: 8



PM MAIL   Вверх
andrx
Дата 11.1.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



dronzo
Спасибо!
помоему то что надо, сейчас буду пробывать ! smile

как только получится - напишу ответ !
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
andrx
Дата 11.1.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



Уважаемый dronzo
Еще раз спасибо, все работает просто замечательно !
жаль что не могу повысить Вам рейтинг smile , еще не дорос smile

Посему ходатайствую перед модератором об увелечении репутации dronzo.

Всем кто столкнется с подобной проблемой приведу решение, которое посоветовал dronzo,
но в это решение мне пришлось добаить еще один оператор if ( delegates != null )
для проверки наличия добавленных
обработчиков события, иначе может возникнуть ошибка :
Код

foreach ( Control control in this.Controls )
                {
                    // отключить каждую кнопку
                    control.Enabled = false;

                    FieldInfo fieldEventClick = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static);
                    object fieldEventClickValue = fieldEventClick.GetValue(control);
                    EventHandlerList handlerList = (EventHandlerList)control.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(control, new object[]{});
                    Delegate delegates = handlerList[fieldEventClickValue];
                    if ( delegates != null )
                    {
                        foreach(Delegate targetDelegate in delegates.GetInvocationList())
                        {
                            handlerList.RemoveHandler(fieldEventClickValue, targetDelegate);
                        }
                    }
                }


Это сообщение отредактировал(а) andrx - 11.1.2006, 15:34
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
dronzo
Дата 11.1.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.11.2005
Где: Москва

Репутация: 6
Всего: 8



Да ладно - писал ведь не я. Просто наткнулся на этот код некоторое время назад, когда похожий вопрос возник smile

Это сообщение отредактировал(а) dronzo - 11.1.2006, 15:55
PM MAIL   Вверх
mr.DUDA
Дата 11.1.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



+1


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.