powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать количество подписчиков на какое-то событие? Возможно ли?
13 сообщений из 13, страница 1 из 1
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059648
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
this.obj.MyEvent+= new EventHandler(obj_MyEvent);
this.obj.MyEvent+= new EventHandler(obj_MySecondEvent);
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059654
Фотография Местный король Делфей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland
Код: c#
1.
2.
this.obj.MyEvent+= new EventHandler(obj_MyEvent);
this.obj.MyEvent+= new EventHandler(obj_MySecondEvent);



GetInvocationList
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059674
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таком случае пытаюсь написать

Код: c#
1.
a = this.obj.MyEvent.GetInvocationList().Length



выдаёт ошибку "MyEvent может находиться только слева от знака += и -=". А ещё после MyEvent я ставлю точку - никакого списка интеллисенс не показывает...
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059676
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в данном случае obj - это имя компонента типа "список".
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059685
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

Ну так <object>.GetInvocationList <-- где объект есть делегат, в хелпе же указано.
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059690
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,
ну сделайте так и будет вам щастье
Код: c#
1.
 var vv = EVENT.GetInvocationList();
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059696
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADCharles Weyland,

Ну так <object>.GetInvocationList <-- где объект есть делегат, в хелпе же указано.
Я хотел узнать число подписчиков на конкретное событие, а не на объект. Но, тем не менее. Сделал, как Вы сказали:

Ошибка 1 "System.Windows.Forms.CheckBox" не содержит определения для "GetInvocationList" и не был найден метод расширения "GetInvocationList", принимающий тип "System.Windows.Forms.CheckBox" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)

P.s. да, у меня не листбокс, а чекбокс.
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059707
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erCharles Weyland,
ну сделайте так и будет вам щастье
Код: c#
1.
 var vv = EVENT.GetInvocationList();


Написал:
Код: c#
1.
var vv = MyCheckBox.CheckedChanged.GetInvocationList();


подчёркивает CheckedChanged, пишет:
Ошибка 2 Событие "System.Windows.Forms.CheckBox.CheckedChanged" может находиться только в левой части операции += или -=

Или что имелось в виду?
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059716
Фотография Местный король Делфей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public event EventHandler MyEvent;

    public int GetHandlersCount()
    {
        var eventHandler = this.MyEvent;
        if(eventHandler != null)
            return eventHandler.GetInvocationList().Length;
        else return 0;
    }
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059751
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местный король Делфей
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public event EventHandler MyEvent;

    public int GetHandlersCount()
    {
        var eventHandler = this.MyEvent;
        if(eventHandler != null)
            return eventHandler.GetInvocationList().Length;
        else return 0;
    }


Да, в и-нете много находил таких кодов... но немного не то.
Можете привести такой же пример, но только с каким-нибудь стандартным компонентом.
Вот, есть чекбокс или кнопка. На её событие подписались два, три, 4 раза. Как узнать число подписчиков на событие, скажем, "Onclick"?
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059769
Фотография Местный король Делфей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandМестный король Делфей
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public event EventHandler MyEvent;

    public int GetHandlersCount()
    {
        var eventHandler = this.MyEvent;
        if(eventHandler != null)
            return eventHandler.GetInvocationList().Length;
        else return 0;
    }


Да, в и-нете много находил таких кодов... но немного не то.
Можете привести такой же пример, но только с каким-нибудь стандартным компонентом.
Вот, есть чекбокс или кнопка. На её событие подписались два, три, 4 раза. Как узнать число подписчиков на событие, скажем, "Onclick"?

а что вы хотели? тот ивент объявлен в другом классе, поэтому компилятор и ругается. Через рефлексию почти всегда можно решить такую проблему
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059775
Фотография Местный король Делфей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ.
большой код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
public static class EventUtilities
{
  public static Delegate[] GetInvocationList(string eventName, object obj)
  {
    bool success;
    var result = TryGetInvocationList(eventName, obj, out success);
    if (success)
    { return result; }
    else
    { throw new InvalidOperationException(); }
  }

  public static Delegate[] TryGetInvocationList(string eventName, object obj,
      out bool success)
  {
    success = false;

    if (obj == null)
    { throw new ArgumentNullException("obj"); }

    if (eventName == null)
    { throw new ArgumentNullException("eventName"); }

    var field = GetField(eventName, obj.GetType());
    if (field == null)
    { return null; }

    success = true;
    var mDel = field.GetValue(obj) as MulticastDelegate;

    if (mDel == null)
    { return null; }
    else
    { return mDel.GetInvocationList(); }
  }

  public static bool ClearInvocationList(string eventName, object obj)
  {
    if (obj == null)
    { throw new ArgumentNullException("obj"); }

    if (eventName == null)
    { throw new ArgumentNullException("eventName"); }

    var field = GetField(eventName, obj.GetType());

    if (field == null)
    { return false; }

    field.SetValue(obj, null);
    return true;
  }

  private static FieldInfo GetField(string eventName, Type type)
  {
    var field = type.GetField(eventName, BindingFlags.Instance | 
      BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Public);

    if (field == null)
    { return null; }

    if (field.FieldType == typeof(MulticastDelegate))
    { return field; }

    if(field.FieldType.IsSubclassOf(typeof(MulticastDelegate)))
    { return field; }

    return null;
  }
}




юзать так:
Код: c#
1.
var myEvents = EventUtilities.GetInvocationList("CheckedChanged", targetCheckbox);
...
Рейтинг: 0 / 0
Как узнать количество подписчиков на какое-то событие? Возможно ли?
    #38059976
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю!!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать количество подписчиков на какое-то событие? Возможно ли?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]