2009-08-19 3 views
0

У меня есть пользовательский datagridviewcolumn, в котором я добавил событие. Проблема заключается в том, что я не могу понять, как узнать, кто подписался на событие текущего объекта столбца и добавить эти подписки к клонированному объекту столбца.Как клонировать подписки на события объекта vs.net?

Я обойду эту проблему, попросив вызывающую программу передать адрес обработчика делегату в настраиваемом столбце вместо добавления обработчика события.

Простите мою терминологию, я надеюсь, вы понимаете, что я пытаюсь сказать!

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

Это прекрасно, но пользователи средств управления ожидают, что смогут записывать события, выбрав событие в visual studio - которое создает шаблон метода.

ответ

1

По крайней мере, на C# у вас могут быть «сумматоры» и «удалители» для событий, таких как геттеры и сеттеры для свойств.

Возможно, вы можете использовать это для выполнения пользовательской обработки во время процесса добавления какого-либо события в событие?

EDIT
Я не знаю много о VB.NET, но я гугле немного и нашел следующий фрагмент кода:

Public Delegate Sub WorkDone(ByVal completedWork As Integer) 
Private handlers As New ArrayList() 

Public Custom Event WorkCompleted As WorkDone 
    AddHandler (ByVal value As WorkDone) 
    If handlers.Count <= 5 Then 
     handlers.Add(value) 
    End If 
    End AddHandler 

    RemoveHandler(ByVal value As WorkDone) 
    handlers.Remove(value) 
    End RemoveHandler 

    RaiseEvent (ByVal completedWork As Integer) 
    If completedWork > 50 Then 
     For Each handler As WorkDone In handlers 
     handler.Invoke(completedWork) 
     Next 
    End If 
    End RaiseEvent 
End Event 

Это должно помочь вам настроить свой обработчик событий, так что вы может «видеть» делегатов, добавляемых к событию из вашего класса.

+0

Спасибо, это именно то, что я был после. – Jules

0

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

Суффикс имени события Событие, у вас есть доступ к некоторым свойствам и методам. Итак, в примере Торстен я бы назвал событие WorkCompleted Событие.

Уместно ответить на этот вопрос GetInvocationList, который возвращает список делегатов, прикрепленных к событию.

В дополнение к этому, проверьте, выполнено ли WorkCompleted Событие IsNot Nothing, расскажет вам, есть ли обработчики для события, не получая список вызовов.

eta: Нами курсивом являются «*», когда я отправляю сообщение. Не знаю, почему.

Смежные вопросы