VB.Net/Development/Event
Define and fire event
Imports System
Public Class MainClass
Shared Dim WithEvents anEmployee As EmployeeWithEvents
Public Shared Sub Main()
anEmployee = New EmployeeWithEvents("Joe", 100000)
anEmployee.RaiseSalary(10)
End Sub
Shared Public Sub anEmployee_SalarySecurityEvent(ByVal Sender As EmployeeWithEvents, ByVal e As System.EventArgs) Handles anEmployee.SalarySecurityEvent
Console.WriteLine(Sender.Name & " had an improper salary raise attempted")
End Sub
End Class
Public Class EmployeeWithEvents
Public Name As String
Public Salary As Decimal
Public Event SalarySecurityEvent(ByVal Sender As EmployeeWithEvents,ByVal e As EventArgs)
Public Sub New(ByVal sName As String, ByVal curSalary As Decimal)
Name = sName
Salary = curSalary
End Sub
Public Overloads Sub RaiseSalary(ByVal Percent As Decimal)
RaiseEvent SalarySecurityEvent(Me, New System.EventArgs())
End Sub
End Class
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