2012-09-03 2 views
1

Я пытаюсь проверить очень простое управление событиями в VB.NET.Как написать обработчик событий в VB.NET?

До сих пор у меня есть:

Public Delegate Sub TestEventDelegate() 
Public Event TestEvent As TestEventDelegate 

Sub MySub 
    Raise TestEvent 
End Sub 

Как бы вы написать обработчик событий для данного мероприятия, что только отображается простой MessageBox?

ответ

4

Написание метода обработчика проста - просто написать Sub, который не принимает никаких параметров и отображает окно сообщения.

Затем нужно подписаться на обработчик события, который вы можете сделать, добавив пункт Handles к методу:

Sub ShowMessageBox() Handles foo.TestEvent 

Или с помощью AddHandler заявление:

AddHandler foo.TestEvent, AddressOf ShowMessageBox 

Примечание что для выполнения соглашений .NET ваш делегат должен иметь два параметра: один из типов Object, чтобы указать, какой объект поднял событие, и один из типа EventArgs или подкласс для предоставления дополнительной информации. Это не требуется языком, но это широко принятое соглашение.

+0

Почему в эту инструкцию не входит часть вложения: http://msdn.microsoft.com/en-US/library/wkzf914z(v=vs.80)? Есть ли неявное вложение в некоторых случаях? –

+0

@PaulLassiter: Эта страница посвящена * поднятию * события - стороне «сервера», так сказать. Присоединение обработчика событий является «клиентской» стороной. –

+0

Извините, что я имел в виду [link] (http://msdn.microsoft.com/en-US/library/2ccyd347 (v = vs.80)) –

2

В VB у нас есть два способа подписаться на событие класса Publisher.

'Delegate 
Public Delegate Sub TestEventDelegate() 

'Event publisher class that publishes and raises an event 

Public Class EventPublisher 
    Private _num As Integer 
    Public Event NumberChanged As TestEventDelegate 
    Public Property Number As Integer 
     Get 
      Return _num 
     End Get 
     Set(value As Integer) 
      _num = value 
      RaiseEvent NumberChanged() 
     End Set 
    End Property 
End Class 

'Event subscriber class 

Public Class EventSubscriber 
    'instance of EventPublisher class 
    Private WithEvents myObject As New EventPublisher 

    'Handler of myObject.NumberChanged event 
    Public Sub ShowMessage() Handles myObject.NumberChanged 
     Console.WriteLine("Value has been changed") 
    End Sub 

    Shared Sub Main() 
     Dim es As New EventSubscriber 
     es.myObject.Number = 10 
     es.myObject.Number = 20 

     'Handle the events dynamically using AddHandler 
     Dim ep1 As New EventPublisher 
     ep1.Number = 101 
     'Attach an event to the handler 
     AddHandler ep1.NumberChanged, AddressOf TestIt 
     ep1.Number = 102 
    End Sub 
    Shared Sub TestIt() 
     Console.WriteLine("Number is modified") 
    End Sub 
End Class 
+0

Почему не входит в состав этой инструкции: [link] (http://msdn.microsoft.com/ru-ru/library/2ccyd347 (v = vs.80))? Есть ли неявное вложение в некоторых случаях? –

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