|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||
Как, используя рефлексию, получить перечень событий, связанных с той же кнопкой?26.01.2013, 18:08. Показов 3675. Ответов 15
Метки нет (Все метки)
Не имя события- имя события и дурак получит. А само событие! Ну то есть: создадим форму и кинем на неё кнопку.
0
|
|||||||||||
| 26.01.2013, 18:08 | |
|
Ответы с готовыми решениями:
15
Как получить доступ к приватному полю используя рефлексию? (в одном классе)
Как получить элемент списка через рефлексию? |
|
Почетный модератор
|
||||||
| 26.01.2013, 18:31 | ||||||
1
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 26.01.2013, 18:36 | ||
|
По крайней мере, для тех событий, у которых сигнатура делегата имеет object первым параметром и EventArgs вторым.
0
|
||
|
Почетный модератор
|
||||||
| 26.01.2013, 19:39 | ||||||
|
Угу, только у кнопки не все события основаны на EventHandler.
К примеру событие MouseDoubleClick основано на делегате MouseEventHandler, и при попытке подписаться на него используя EventHandler вылетит Exception о невозможности преобразования EventHandler к MouseEventHandler. Добавлено через 12 минут Можно так извернуться конечно
1
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||||||||||||||||||
| 27.01.2013, 00:51 [ТС] | ||||||||||||||||||||||
|
Ну я просто хочу узнать какие события создаются при том или ином действии. Не вручную же мне прописывать к каждому событию обработчик!
Добавлено через 4 часа 59 минут SSTREGG, скажите пожалуйста, вот я взял ваш код и вот так переписал:
А теперь ваш код. Вот строчка, которая у нас различается.
Ну вот вопрос- чем же таким различаются способы передачи мой и ваш, что ваш работает, а мой нет, если и в том и другом случае метод можно идентифицировать однозначно (он единственен)? Может в MethodInfo флаг какой присутствует, навроде "закрыть глаза на типы аргументов"? Посмотрел, ничё не нашёл подобного... Уж я не знаю что и думать. Был бы благодарен, если бы объяснили.
0
|
||||||||||||||||||||||
|
Почетный модератор
|
|||||||||||||||||
| 27.01.2013, 01:36 | |||||||||||||||||
|
Главным отличием является то какие флаги перечисления DelegateBindingFlags (внутренний тип) используются внутри этих методов, из-за этого и разный результат.
1
|
|||||||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 27.01.2013, 14:13 [ТС] | ||||||
|
ладно, и теперь второй вопрос, как получить имя события в самом обработчике?
...А получить-то надо!
0
|
||||||
|
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
| 27.01.2013, 14:52 | |
|
типа надо получить method ?
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 27.01.2013, 15:24 [ТС] | ||||||
|
нет, метод я получу вот так:
0
|
||||||
|
Почетный модератор
|
||||||
| 27.01.2013, 17:51 | ||||||
|
Кроме анализа стека вызовов больше ничего на ум не приходит
![]()
1
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||
| 27.01.2013, 18:04 [ТС] | ||
|
Проникнитесь моим гениальным планом и пусть он вас взбодрит. То есть смысл такой: получить все события, которые возникают при том или ином действии. Чтобы не бежать каждый раз и не спрашивать, "а как установить курсор в ячейке dataGridView туда-то", а просто вешаем на все события dataGridView обработчики и работаем и смотрим: "Ага, вызываются такие-то события. Ага, вот после обработки такого события, курсор поместился ту-да-то. Ага, а в какой момент времени получена новая позиция курсора?" Анализ во общем.
Обработчики-то мы повесили автоматом. А вот как в каждом получить имя события, вызвавшего его- вот вопрос. Не то, чтобы я был таким ленивым в плане изучения нового, просто
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 27.01.2013, 18:26 | ||
|
В ее состав входит замечательная вещь под названием IntelliTrace - включается в настройках и позволяет делать именно то, что вам нужно без плясок с рефлексией. Порой очень ее не хватает в моей Premium
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||||||||
| 27.01.2013, 20:55 [ТС] | ||||||||||||
|
К лирике мы ещё вернёмся. Щас поговорим о стеке. SSTREGG, я упростил ваш код. Ну то есть: кидаем кнопку на форму, кидаем туда же DataGridView лепим обработчик события Click и смотим, чё у нас лежит в стеке по вызову button1_Click
Вопрос открыт. Может быть, существует способ программно передать имя события или само событие параметром обработчику? Практика известная. (Создаём процесс- передаём указатель на собственные данные, создаём поток- то же самое; я щас не про C#) Тогда можно было бы попытаться, коль скоро мы добавляем обработчики программно, при добавлении предусмотреть передачу парметром события? Так нет же:
0
|
||||||||||||
|
Почетный модератор
|
||
| 27.01.2013, 21:29 | ||
|
И логично подумать что сразу за текущим методом в стеке будет храниться описание метода который возбудил определенное событие. И при условии что у события один подписчик, мы получим метод OnИмяСобытия, что в принципе и продемонстрировано Вашим выводом в DataGridView.
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||
| 27.01.2013, 22:03 [ТС] | |||
|
А впрочем, сие неважно. Навскидку- фрейм этого подписчика будет отсутствовать- ведь он либо закончил работу, либо и не начинал ещё. Значит, в стеке нет ни его имени, ни параметров. Правда, если два подписчика, стек выгляди так:
0
|
|||
| 27.01.2013, 22:03 | |
|
Помогаю со студенческими работами здесь
16
Как получить тело метода через рефлексию? Получить список инстансов через рефлексию Выполнение разных процедур одной и той же кнопкой
Получить доступ к TryParse типа Enum через рефлексию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|