由於收費系統中,碰到幾次事件的調用,對其中參數不是很理解,就總結了一下vb.net中的事件。
在vb6.0中事件非常簡單,就拿最常用的單擊按鈕事件來說,vb中的代碼是:
Private Sub Command1_Click()MsgBox ("你點擊了button1")End Sub
調用command1的單擊事件也很簡單:
Private Sub Command2_Click() Command1_ClickEnd Sub
在vb6.0中,呼叫事件是根據事件名來調用的,不需要參數。
但是在vb.net中,事件添加了參數:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("你點擊了button1") End Sub
在vb.net中事件多了三個附加資訊:sender、e和handles。仍以button1的單擊為例,說明這三個參數的含義:
Private Sub But_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(sender.ToString) MsgBox(e.ToString) End Sub
注意觀察,原本的button_Click變為了but_Click,這在vb6.0中是不會執行的,但在vb.net中不影響事件的執行,說明在vb.net中,事件不再僅依賴事件名。下來來看一下執行結果:
sender 的類型為object類型,顯示的結果說明的是:直接引起事件的是form的button,button上的文字為“Button1”。e的類型是EventArgs,類型解釋為:EventArgs是一個委託聲明,是包含事件數目據的類的基類,用於傳遞事件的細節,第二個顯示的說明是:為這個事件提供資料的是滑鼠。
再說handles,在我理解看來,這是一個委託,相當於由handles後面的參數間接引發事件,下面我說一下我對單擊button1事件執行過程的理解:當單擊button1時,handler後面的button1間接引發事件,事件的直接引發者是button1這個按鈕即sender,然後滑鼠把需要執行事件所需的參數傳遞給事件即e,然後代碼執行。以button1和button2的單擊事件為例:
Private Sub But_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("你點擊了button1") End Sub Private Sub Butt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button1.Click MsgBox("你點擊了button2") MsgBox(sender.ToString) 'AddHandler Button1.Click, AddressOf Button3_Click End Sub
單擊button1的結果:
這說明,單擊button1時還增加了button2的單擊事件,需要說明的是,這樣的代碼方法,單擊button1,會先執行button2的代碼,再執行button1的代碼。
AddHandler Button1.Click, AddressOf Button3_Click RemoveHandler Button1.Click, AddressOf Button3_Click
這兩行代碼想對容易理解,需要說明的是addhandler和removehandler後面的第一個參數是“委託誰執行調用的事件”,第二個參數是“要執行的事件”,通過這兩行代碼可以在第三方事件中很容易進行事件的委託和取消委託。