1. 程式人生 > >VB中自定義事件和事件處理

VB中自定義事件和事件處理

一個包含事件的類:ClsWithEvents

ClsWithEvents類中,有兩個屬性Width和Height,這兩個屬性改變時會分別觸發對應的Changed事件。

在 Public Event 聲明瞭兩個事件委託的原型

Public Class ClsWithEvents
    Private mWidth As Integer
    Private mHeight As Integer

    ' 事件委託的原型
    Public Event WidthChanged(ByVal newWdith As Integer)
    Public Event HeightChanged(ByVal newHeight As Integer)

    Public Property Width() As Integer
        Get
            Return mWidth
        End Get
        Set(ByVal value As Integer)

            If value <> mWidth Then
                RaiseEvent WidthChanged(value) ' 觸發WidthChanged事件
            End If

            mWidth = value
        End Set
    End Property

    Public Property Height() As Integer
        Get
            Return mHeight
        End Get
        Set(ByVal value As Integer)

            If value <> mHeight Then
                RaiseEvent HeightChanged(value) ' 觸發HeightChanged事件
            End If

            mHeight = value
        End Set
    End Property
End Class

事件的兩種不同處理方法:

方法一、WithEvents關鍵字

Public Class Form1
    Private WithEvents objClsWithEvents As New ClsWithEvents


    Private Sub objClsWithEvents_HeightChanged(ByVal newHeight As Integer) _
        Handles objClsWithEvents.HeightChanged
        ' 處理 objClsWithEvents 的 HeightChanged 事件
    End Sub


    Private Sub objClsWithEvents_WidthChanged(ByVal newWdith As Integer) _
        Handles objClsWithEvents.WidthChanged
        ' 處理 objClsWithEvents 的 WidthChanged 事件
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        objClsWithEvents.Width = 200
        objClsWithEvents.Height = 200
    End Sub
End Class

方法二、AddHandler關鍵字

Public Class Form1
    Private Sub ClsWithEvents_HeightChanged(ByVal newHeight As Integer)
        ' 處理 ClsWithEvents 物件的 HeightChanged 事件
    End Sub

    Private Sub ClsWithEvents_WidthChanged(ByVal newWdith As Integer)
        ' 處理 ClsWithEvents 物件的 WidthChanged 事件
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objClsWithEvents As New ClsWithEvents
        AddHandler objClsWithEvents.HeightChanged, AddressOf ClsWithEvents_HeightChanged
        AddHandler objClsWithEvents.WidthChanged, AddressOf ClsWithEvents_WidthChanged
        objClsWithEvents.Height = 200
        objClsWithEvents.Width = 200
    End Sub
End Class