Ответ 1
Опускание WithEvents не блокирует участников из событий. Это просто мешает вам использовать ключевое слово "handles" для своих событий.
Вот типичное использование WithEvents:
Class C1
Public WithEvents ev As New EventThrower()
Public Sub catcher() Handles ev.event
Debug.print("Event")
End Sub
End Class
Вот класс, который не использует WithEvents и приблизительно эквивалентен. Он демонстрирует, почему WithEvents весьма полезен:
Class C2
Private _ev As EventThrower
Public Property ev() As EventThrower
Get
Return _ev
End Get
Set(ByVal value As EventThrower)
If _ev IsNot Nothing Then
removehandler _ev.event, addressof catcher
End If
_ev = value
If _ev IsNot Nothing Then
addhandler _ev.event, addressof catcher
End If
End Set
End Property
Public Sub New()
ev = New EventThrower()
End Sub
Public Sub catcher()
Debug.print("Event")
End Sub
End Class