Mega Code Archive

 
Categories / VB.Net / Development
 

Use Delegate to react to an Event

Imports System Imports System.Collections Delegate Sub NameChangedDelegate(ByVal new_name As String) Public Class MainClass          Shared Sub Main(ByVal args As String())         Dim student As New Student         AddHandler student.NameChanged, AddressOf Student_NameChanged         AddHandler student.NameChanged, AddressOf Student_NameChanged         student.FirstName = "First Name"         RemoveHandler student.NameChanged, AddressOf Student_NameChanged         student.LastName = "Last Name"         RemoveHandler student.NameChanged, AddressOf Student_NameChanged     End Sub     Private WithEvents student As Student     Shared Private Sub Student_NameChanged(ByVal new_name As String) Handles student.NameChanged         Console.WriteLine("Student_NameChanged: " & new_name)     End Sub      End Class    Public Class Student     ' The FirstName property.     Private m_FirstName As String     Public Property FirstName() As String         Get             Return m_FirstName         End Get         Set(ByVal value As String)             m_FirstName = value             RaiseEvent NameChanged(m_FirstName & " " & m_LastName)         End Set     End Property     ' The LastName property.     Private m_LastName As String     Public Property LastName() As String         Get             Return m_LastName         End Get         Set(ByVal value As String)             m_LastName = value             RaiseEvent NameChanged(m_FirstName & " " & m_LastName)         End Set     End Property     ' List to hold the event handler delegates.     Private m_EventDelegates As New ArrayList     ' Defines the event handler signature.     Public Delegate Sub NameChangedDelegate(ByVal new_name As String)     ' Define the custom NameChanged event.     Public Custom Event NameChanged As NameChangedDelegate         AddHandler(ByVal value As NameChangedDelegate)             Console.WriteLine("AddHandler")             m_EventDelegates.Add(value)         End AddHandler         RemoveHandler(ByVal value As NameChangedDelegate)             Console.WriteLine("RemoveHandler")             m_EventDelegates.Remove(value)         End RemoveHandler         RaiseEvent(ByVal new_name As String)             Console.WriteLine("RaiseEvent (" & new_name & ")")             For Each a_delegate As NameChangedDelegate In m_EventDelegates                 a_delegate(new_name.Replace(" ", "+"))             Next a_delegate         End RaiseEvent     End Event End Class