VB.Net/Development/Event

Материал из VB Эксперт
Перейти к: навигация, поиск

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>