vb和vb.net事件機制


學習java事件前,回顧了下vb6和vb.net的事件機制,總結在這里,供對比用。

    事件是面對對象中對象間通信的方法。事件發生者(又叫事件源)發生一個事件時,通過發送一條消息,給事件接受者(事件處理者),事件接受者可以做出響應的處理。比如在某登錄界面中,單擊一個按鈕,系統會驗證用戶的用戶名和密碼是否正確。用戶單擊按鈕后,按鈕(事件源)發出了單擊事件,產生了自己被單擊的消息給窗體,窗體(事件接受者)在自身代碼窗口中進行響應的處理。

 

我們分別看下在vbvb.net中是怎么實現事件機制的。

    在vb6中,使用Event關鍵字定義事件,raiseEvent發出事件消息,在接受者的類中使用WithEvent表明自己是某個類的事件的接受者,我們看這樣兩段代碼:

    首先建立一個窗體,是一個登錄窗體,輸入用戶名和密碼后,點擊登陸按鈕可以登陸,代碼(vb6)如下,使用了WithEvent來接收驗證類(verifyClass)的消息:

 

Option Explicit

'本句代碼表明該窗體能接受驗證類的事件消息
Private WithEvents vfClass As VerifyClass

Private Sub cmdLogin_Click()
    '定義用戶名和密碼
    Dim userName As String
    Dim password As String
    '定義返回結果
    Dim Result As Boolean
    Set vfClass = New VerifyClass
    
    userName = txtUserName.Text
    password = txtPassword.Text
    
    '將用戶名和密碼傳到驗證類進行驗證
    Result = vfClass.Verify(userName, password)
    
End Sub

Private Sub Form_Load()

End Sub

'引發驗證失敗事件后,在此處可以進行相應處理
Private Sub vfClass_loginFail(ByVal userName As String)
    MsgBox (userName + "登錄失敗")
End Sub
'驗證成功事件
Private Sub vfClass_LoginSuccess(ByVal userName As String)
     MsgBox (userName + "登錄成功")
End Sub

接下來添加一個類模塊,是登陸窗體中用到的驗證類(verifyClass)的代碼,里面定義(Event)了並引發(raiseEvent)了事件:

 

 

Option Explicit

'定義驗證成功和失敗的事件
Public Event LoginSuccess(ByVal userName As String)
Public Event loginFail(ByVal userName As String)

'驗證方法:對用戶名和密碼進行驗證
Public Function Verify(ByVal userName As String, ByVal password As String) As Boolean
    Dim blnResult As Boolean
    
    If userName = "123" And password = "123" Then
        '如果正確,發出登陸成功的消息
        RaiseEvent LoginSuccess(userName)
        blnResult = True
    Else
        '錯誤則發出登陸失敗的消息
        RaiseEvent loginFail(userName)
         blnResult = False
    End If
    Verify = blnResult
    
End Function

 


vb.net中事件的實現機制同vb基本相同,並且有了優化,通過Handles關鍵字,使事件實現的機制更靈活,handles可以使多個事件到同一個事件處理程序:

 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button3.Click
        System.Windows.Forms.MessageBox.Show("我被觸發了")
End Sub

 

 

也可以通過AddHandler動態的綁定事件處理程序,即可以根據當時的條件選擇將要綁定的事件處理程序,看下面這個例子。

首先定義一個person類,有走路這個事件,在走路方法中觸發走路事件

 

Public Class Person

    Public Event walked(ByVal Distance As Integer)

    Public Sub walk(ByVal Distance As Integer)
        RaiseEvent walked(Distance)
    End Sub

End Class


接下來新建一個窗體類,窗體上有一個文本框和一個按鈕,代碼如下

 

 

Public Class Form1
    '本句代碼表明該窗體能接受驗證類的事件消息
    Public WithEvents objPerson As Person


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
        objPerson = New Person()
        '滿足條件下才執行綁定操作
        If (TextBox1.Text = "1") Then
            '滿足條件,執行動態綁定,將事件綁定到某方法,該方法轉變成事件處理程序
            AddHandler objPerson.walked, AddressOf Person_walk
            objPerson.walk(50)
        Else
            System.Windows.Forms.MessageBox.Show("您輸入的文本不是1")
        End If

    End Sub
    '觸發的事件將綁定到本事件處理程序
    Public Sub Person_walk(ByVal Distance As Integer)
        System.Windows.Forms.MessageBox.Show("a person walked" + Distance.ToString() + " kilometer!")
    End Sub

End Class


這就是vb和vb.net的事件處理機制,等學了java事件機制后將進行對比。

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM