Как работает «Пользовательское событие» в VB.Net? - PullRequest
7 голосов
/ 23 декабря 2008

В C # если я хочу создать «Пользовательское событие», вы делаете что-то вроде этого:

private EventHandler _MyEvent;
Public Event EventHandler MyEvent 
{
   add{ _MyEvent += value; }
   remove{ _MyEvent -= Value; }
}
protected void RaiseMyEvent()
{
   if(_MyEvent != nul)
      _MyEvent(this, EventArgs.Empty);
}

В VB это не так просто, и я не могу найти какую-либо помощь в сети. Это не работает:

private _MyEvent as EventHandler
Public Custom Event MyEvent as EventHandler
   AddHandler(ByVal value as EventHandler)
      _MyEvent += value 'does not work
      addhandler _MyEvent, value 'does not work
      [Delegate].Combine(_MyEvent, value) '_MyEvent still nothing
   End AddHandler
   RemoveHandler(ByVal value as EventHandler)
      'Same kind of stuff here
   End RemoveHandler
   RaiseEvent(sender as Object, e as EventArgs)
      if(_MyEvent IsNot Nothing) Then '_MyEvent is always nothing
         _MyEvent.Invoke(sender, e)
      End If
   End RaiseEvent
End Event

Пожалуйста, помогите.

Ответы [ 3 ]

11 голосов
/ 24 декабря 2008

VB берет на себя большую часть работы над миксом.

Просто объявите событие:

Public Event DidSomething(sender as object, e as EventArgs)

Тогда в любом месте кода назовите падающее событие рейза

RaiseEvent DidSomething(me, EventArgs.Empty)
8 голосов
/ 23 декабря 2008

Делегаты являются неизменяемыми, поэтому метод «[Delegate] .Combine» возвращает новый делегат, но не изменяет параметры. Итак, вам нужно:

_MyEvent = [Delegate].Combine(_MyEvent, value)
3 голосов
/ 07 февраля 2012

... и теперь, если вы (или кто-то еще спрашивает), как создать метод, который обрабатывает вызванное событие, на основе примера DidSomething, вы должны сделать это, как показано ниже:

Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething
   'Code for Event here
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...