VB.Net/Development/Event — различия между версиями

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

Версия 16:40, 26 мая 2010

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