Как определить, возникло ли событие

#c# #winforms #events

#c# #winforms #Мероприятия

Вопрос:

Можете ли вы сказать мне, как определить, какие события вызваны в winform или как добавить все вызванные события в список или в файл в c #?

Комментарии:

1. Вы просто хотите отладить события или вы хотите записывать события в файл, когда запущенное приложение является производственным качеством? Каково конкретное приложение для вашего вопроса?

2. я хочу регистрировать каждое событие в приложении и делать это, не подписываясь на каждое событие в программе.

Ответ №1:

Из вашего вопроса звучит так, как будто вы хотите видеть каждое запущенное событие. Для этого вам нужно будет подписаться на каждое событие. Если вы действительно хотите пойти по этому пути, вы могли бы создать один метод, который считывал бы переданные переменные и сообщал вам, какое событие вызвало метод. Затем вы могли бы подключить этот метод к каждому событию в вашем приложении winform. Список был бы огромным, но это дало бы вам представление о том, когда было запущено каждое событие.

Ответ №2:

Вы можете использовать управляемый шпион. Он отображает список процессов в виде дерева в левой части окна и PropertyGrid в правой части. Вы можете развернуть процесс, чтобы увидеть окна верхнего уровня в этом процессе.

Когда вы выбираете элемент управления, PropertyGrid показывает свойства этого элемента управления. При нажатии на вкладку События будут отображаться события, такие как перемещение мыши по текущему выбранному элементу управления в treeview. Чтобы начать протоколирование событий, нажмите кнопку Начать протоколирование. Выходные данные будут выглядеть так, как показано. введите описание изображения здесь

Ответ №3:

Если вы говорите о событиях Windows, вам нужно переопределить метод WndProc().

Управление.Метод WndProc

Основы API WndProc

Ответ №4:

Я не уверен, что правильно понял ваш вопрос, но я все равно попытаюсь ответить на него:
Когда вы подписываетесь на событие, ваш метод будет вызван при возникновении этого события. В вашем методе вы можете зарегистрировать, что событие было вызвано.

Комментарии:

1. я не хочу подписываться на все сообщения, я хочу получать все вызванные события

2. @namco — Что вы подразумеваете под «получить все вызванные события»? Вы имеете в виду, что хотите, чтобы ваше приложение получало уведомления всякий раз, когда возникает событие?

3. @namco: Это то, что делает мой ответ. Я изменил небольшую часть своего ответа, чтобы избежать путаницы.

4. @namco, тебе действительно нужно быть более конкретным в своем вопросе. Никто не знает, что вам нужно, и для того, чтобы правильно ответить на ваш вопрос, нам нужно знать, что вы пытаетесь сделать. Решение тривиально, но нам нужна информация от вас.

5. Хорошо, подумайте, что у нас есть форма и у нас есть некоторые компоненты (например. Кнопка, флажок и т.д.). Когда я нажимаю на кнопку, программа должна добавить в список поле «Вызвано событие button1_Click», когда я нажимаю на форму, она должна добавить «Вызвано событие form1_Click» и так далее.

Ответ №5:

Чтобы получить события, которые объявлены или унаследованы текущим типом

  typeof(MyClass).GetEvents()
  

После этого для каждого вы можете добавить простой делегат

 MyClass instance = new MyClass();
foreach (var e in typeof(MyClass).GetEvents())
{
   FieldInfo fi = typeof(MyClass).GetField(e.Name, 
                                       BindingFlags.NonPublic | BindingFlags.Instance);
   object value = fi.GetValue(instance);
   if (value == null)
   {
       e.AddEventHandler(instance, handler);
   }
}