Как вывести список всех событий, на которые подписан элемент управления Winforms - PullRequest
0 голосов
/ 25 октября 2018

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

В C # я хочу передатьWinforms управляют методом и возвращают список всех обработчиков событий любого типа, на который подписан элемент управления.Подход с перегрузкой просто возвращает true / false, если элемент управления подписан на определенное событие.

Например:

Button btn = new Button() ;

private void  evt(object sender, EventArgs e) {}
private void mevt(object sender, MouseEventArgs e) {}

private List<string> GetSubscribedEventList<T>(T item) {}
private bool         CheckEventSubscribed  <T>(T item, string evtName) {}

In Main:

  btn.Click   += new EventHandler(evt) ;
  btn.MouseUp += new MouseEventHandler(mevt) ;

  List<string> events = GetSubscribedEventList(btn) ;
  bool HasClickEvent  = CheckEventSubscribed  (btn,"CLICK") ;

Метод list возвращает список элементов, которые являются событиемимена всех подписанных событий, по одному событию на элемент в списке.

Очевидно, что форма возвращаемой информации может отличаться от списка строк, если какая-то другая форма более гибкая.

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

Очень благодарен за помощь.Спасибо!

1 Ответ

0 голосов
/ 25 января 2019
private void button1_Click(object sender, EventArgs e)
 => GetEvents(button1).ForEach(ev => MessageBox.Show($"Name: {ev.Name}"));

private List<EventInfo> GetEvents(Control control)
  => control.GetType().GetEvents().ToList();

Посмотрите, хотите ли вы этого ...

...