VB.Net/Development/Event
Define and fire event
<source lang="vbnet"> 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
</source>
Use Delegate to react to an Event
<source lang="vbnet"> 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
</source>