Просмотр всех обработчиков событий, связанных с кнопкой? - PullRequest
2 голосов
/ 18 марта 2009

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

Есть ли способ просмотра всех обработчиков событий, связанных с конкретным компонентом?

Проблема в том, что на одной из кнопок обработчик события вызывался дважды. Я полагаю, что это произошло из-за того, что я назначил обработчик событий Click дважды, один раз в родительском и один раз в дочернем пользовательском элементе управления. Я удаляю назначение в дочернем элементе управления, и теперь, когда я нажимаю кнопку (в конструкторе VS2008), ничего не происходит!

Любая помощь будет принята с благодарностью!

EDIT

Причина, по которой ничего не произошло, связана с проблемой управления правдой .... неправильный обработчик событий дочернего объекта был неправильным!

Но главное все еще остается ... Я не единственный, кто вносит вклад в кодовую базу, и если мне нужно посмотреть, какие события относятся к компоненту, я не могу явно указать в данный момент. Особенно в отношении таймеров, поскольку мы динамически добавляем и удаляем события, которые необходимо синхронизировать с одним таймером. Было бы хорошо посмотреть, какие события помечены на событие Tick?!

Ответы [ 4 ]

3 голосов
/ 18 марта 2009

Используя Resharper , я делаю это с помощью Shift-F12, который показывает древовидное представление всех использований (включая использования через интерфейс). Без Resharper, вероятно, проще всего использовать поиск текста, как подсказывает Тьялис.

3 голосов
/ 18 марта 2009

Вы можете выполнить текстовый поиск по всему решению или исходному коду текущего проекта на основе того, что вы ищете.
Искать, например: "controlName.EventName +=". Вы непосредственно увидите, что подписалось на это контрольное событие.

0 голосов
/ 18 марта 2009

Может быть, можно попробовать посмотреть на исходный код, чтобы увидеть, если он назначен дважды? Либо в файле .cs, либо в файле .designer.cs.

0 голосов
/ 18 марта 2009

Единственный способ просмотреть все обработчики событий в компоненте (о котором я знаю) - это написать код, который сделает это за вас, возможно, используя Reflection.

Дизайнер VS 2008 не сделает этого за вас; несмотря на то, что большинство событий в элементах управления являются многоадресными, конструктор поддерживает назначение только одного обработчика для каждого события. Если вы делаете что-то более сложное, чем это, вы получите точные результаты, только если действительно отладите свою программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...