vb.net中的自定義事件

'VB.net 自定義事件使用方法
'1.先定義包含事件的類(如下)

Public Class TestEvent
    Public Event MyEvent(ByVal s As String)     '自定義事件
    
    Public Sub StartEvent(ByVal value As String) '觸發事件函數
        RaiseEvent MyEvent(value)          '觸發事件
    End Sub
End Class

'2.在使用事件的類中添加如下代碼
   
      '聲明事件對象
      Private WithEvents mEvent As TestEvent
      '實例化
      mEvent = New TestEvent
      '處理事件函數 注意:函數名必須爲 變量名_事件名
       Private Sub mEvent_MyEvent(ByVal s As String) Handles mEvent.MyEvent
           MsgBox(s)
       End Sub
       '觸發事件
      mEvent.StartEvent("11111")

3.
      '聲明事件對象
      Private mEvent As TestEvent
     '實例化以及綁定處理函數
       mEvent = New TestEvent
         AddHandler (mEvent.MyEvent), AddressOf OnMyEvent    

      '處理事件函數
        Private Sub OnMyEvent(ByVal s As String) Handles mEvent.MyEvent
            MsgBox(s)
        End Sub     
          '觸發事件
      mEvent.StartEvent("2222222")

vb.net 中自定義類中的事件

基本思路:
1,首先在要定義事件的類中聲明事件,然後使用RaiseEvent 激發該事件.
Public Class Person

  Private name As String

   Public Event walked(ByVal distance As Integer)
   
  Public Sub onwalk(ByVal distance As Integer)
    RaiseEvent walked(distance)

  End Sub
End Class
2. 使用WithEvents 聲明該類的對象.
  Friend WithEvents myperson As Person
3,編寫事件處理代碼.
  Private Sub myperson_walked(ByVal distance As Integer) - 
   Handles myperson.walked
   TextBox1.Text = "walked" & distance
   End Sub

4,調用事件.
  Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)  Handles Button1.Click
  myperson.onwalk(20)

  End Sub

 

Vb.Net自定義事件的應用及應注意的地方
主窗體:

Public Event msg(ByVal i As Int16)   '''首先定義一個事件

Dim i As Int16 '''定義一個變量
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        i += 1
        RaiseEvent msg(i) 
'''激發事件
    End Sub
   

    Dim frm As Addition = Nothing '''從窗體
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If frm Is Nothing Then
            frm = New Addition
            frm.main = Me 
'''此處是應該注意的地方,一定要把從窗體定義的主窗體設置成此窗體,否則不會引發事件!
        End If

      '''上面定義從窗體的方法,可以避免多次實例化窗體

        frm.Show()
    End Sub

從窗體:

Public WithEvents main As main '''定義主窗體事件並執行

    Private Sub main_msg(ByVal i As Short) Handles main.msg
        Label1.Text = i
    End Sub

1,以上方法是主窗體定義事件,然後觸發,在從窗體執行的情況,需要注意的是frm.main=me

此句的意思是從窗體的觸發事件是主窗體定義的

2,但是在現實應用中,通常都是從窗體內容發生變化,需要及時更新主窗體,此時代碼有小小的變動,如下,

需要仔細看啊!

主窗體:

   Public WithEvents add As Addition
    Dim frm As Addition = Nothing
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If frm Is Nothing Then
            frm = New Addition
            Me.add = frm   
 '''注意此處的區別
        End If
        frm.Show()
    End Sub

    Private Sub add_msg(ByVal i As Short) Handles add.msg
        Label1.Text = i
    End Sub

從窗體:

       Public Event msg(ByVal i As Int16)
    Dim i As Int16

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        i += 1
        RaiseEvent msg(i)
    End Sub


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章