一委托:此示例演示如何將方法與委托關聯(lián)然后通過委托調(diào)用該方法。
江夏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
創(chuàng)建委托和匹配過程
創(chuàng)建一個名為 MySubDelegate 的委托。
Delegate Sub MySubDelegate(ByVal x As Integer)
聲明一個類,該類包含與該委托具有相同簽名的方法。
Class class1
Sub Sub1(ByVal x As Integer)
MsgBox("The value of x is: " CStr(x))
End Sub
End Class
定義一個方法,該方法創(chuàng)建該委托的實例并通過調(diào)用內(nèi)置的 Invoke 方法調(diào)用與該委托關聯(lián)的方法。
Protected Sub DelegateTest()
Dim c1 As New class1
' Create an instance of the delegate.
Dim msd As MySubDelegate = AddressOf c1.Sub1
' Call the method.
msd.Invoke(10)
End Sub
二、事件
下面的示例程序闡釋如何在一個類中引發(fā)一個事件,然后在另一個類中處理該事件。AlarmClock 類定義公共事件 Alarm,并提供引發(fā)該事件的方法。AlarmEventArgs 類派生自 EventArgs,并定義 Alarm 事件特定的數(shù)據(jù)。WakeMeUp 類定義處理 Alarm 事件的 AlarmRang 方法。AlarmDriver 類一起使用類,將使用 WakeMeUp 的 AlarmRang 方法設置為處理 AlarmClock 的 Alarm 事件。
該示例程序使用事件和委托和引發(fā)事件中詳細說明的概念。
示例
' EventSample.vb.
'
Option Explicit
Option Strict
Imports System
Imports System.ComponentModel
Imports Microsoft.VisualBasic
Namespace EventSample
' Class that contains the data for
' the alarm event. Derives from System.EventArgs.
'
Public Class AlarmEventArgs
Inherits EventArgs
Private _snoozePressed As Boolean
Private nrings As Integer
'Constructor.
'
Public Sub New(snoozePressed As Boolean, nrings As Integer)
Me._snoozePressed = snoozePressed
Me.nrings = nrings
End Sub
' The NumRings property returns the number of rings
' that the alarm clock has sounded when the alarm event
' is generated.
'
Public ReadOnly Property NumRings() As Integer
Get
Return nrings
End Get
End Property
' The SnoozePressed property indicates whether the snooze
' button is pressed on the alarm when the alarm event is generated.
'
Public ReadOnly Property SnoozePressed() As Boolean
Get
Return _snoozePressed
End Get
End Property
' The AlarmText property that contains the wake-up message.
'
Public ReadOnly Property AlarmText() As String
Get
If _snoozePressed Then
Return "Wake Up!!! Snooze time is over."
Else
Return "Wake Up!"
End If
End Get
End Property
End Class
' Delegate declaration.
'
Public Delegate Sub AlarmEventHandler(sender As Object, _
e As AlarmEventArgs)
' The Alarm class that raises the alarm event.
'
Public Class AlarmClock
Private _snoozePressed As Boolean = False
Private nrings As Integer = 0
Private stopFlag As Boolean = False
' The Stop property indicates whether the
' alarm should be turned off.
'
Public Property [Stop]() As Boolean
Get
Return stopFlag
End Get
Set
stopFlag = value
End Set
End Property
' The SnoozePressed property indicates whether the snooze
' button is pressed on the alarm when the alarm event is generated.
'
Public Property SnoozePressed() As Boolean
Get
Return _snoozePressed
End Get
Set
_snoozePressed = value
End Set
End Property
' The event member that is of type AlarmEventHandler.
'
Public Event Alarm As AlarmEventHandler
' The protected OnAlarm method raises the event by invoking
' the delegates. The sender is always this, the current instance
' of the class.
'
Protected Overridable Sub OnAlarm(e As AlarmEventArgs)
RaiseEvent Alarm(Me, e)
End Sub
' This alarm clock does not have
' a user interface.
' To simulate the alarm mechanism it has a loop
' that raises the alarm event at every iteration
' with a time delay of 300 milliseconds,
' if snooze is not pressed. If snooze is pressed,
' the time delay is 1000 milliseconds.
'
Public Sub Start()
Do
nrings += 1
If stopFlag Then
Exit Do
Else
If _snoozePressed Then
System.Threading.Thread.Sleep(1000)
If (True) Then
Dim e As New AlarmEventArgs(_snoozePressed, nrings)
OnAlarm(e)
End If
Else
System.Threading.Thread.Sleep(300)
Dim e As New AlarmEventArgs(_snoozePressed, nrings)
OnAlarm(e)
End If
End If
Loop
End Sub
End Class
' The WakeMeUp class has a method AlarmRang that handles the
' alarm event.
'
Public Class WakeMeUp
Public Sub AlarmRang(sender As Object, e As AlarmEventArgs)
Console.WriteLine((e.AlarmText + ControlChars.Cr))
If Not e.SnoozePressed Then
If e.NumRings Mod 10 = 0 Then
Console.WriteLine(" Let alarm ring? Enter Y")
Console.WriteLine(" Press Snooze? Enter N")
Console.WriteLine(" Stop Alarm? Enter Q")
Dim input As String = Console.ReadLine()
If input.Equals("Y") Or input.Equals("y") Then
Return
Else
If input.Equals("N") Or input.Equals("n") Then
CType(sender, AlarmClock).SnoozePressed = True
Return
Else
CType(sender, AlarmClock).Stop = True
Return
End If
End If
End If
Else
Console.WriteLine(" Let alarm ring? Enter Y")
Console.WriteLine(" Stop Alarm? Enter Q")
Dim input As String = Console.ReadLine()
If input.Equals("Y") Or input.Equals("y") Then
Return
Else
CType(sender, AlarmClock).Stop = True
Return
End If
End If
End Sub
End Class
' The driver class that hooks up the event handling method of
' WakeMeUp to the alarm event of an Alarm object using a delegate.
' In a forms-based application, the driver class is the
' form.
'
Public Class AlarmDriver
Public Shared Sub Main()
' Instantiates the event receiver.
Dim w As New WakeMeUp()
' Instantiates the event source.
Dim clock As New AlarmClock()
' Wires the AlarmRang method to the Alarm event.
AddHandler clock.Alarm, AddressOf w.AlarmRang
clock.Start()
End Sub
End Class
End Namespace
聲明事件只需用
private event 事件名稱(參數(shù)表)
在通用部分聲明
引用這個詞不太恰當,應該說是觸發(fā)
在需要觸發(fā)的地方用
raiseevent 事件名稱(參數(shù)表)就可以了
名稱
說明
Activated
當使用代碼激活或用戶激活窗體時發(fā)生。
AutoSizeChanged
當?AutoSize?屬性更改時發(fā)生。
AutoValidateChanged
當?AutoValidate?屬性更改時發(fā)生。
BackColorChanged
當?BackColor?屬性的值更改時發(fā)生。(從?Control?繼承。)
BackgroundImageChanged
當?BackgroundImage?屬性的值更改時發(fā)生。(從?Control?繼承。)
BackgroundImageLayoutChanged
當?BackgroundImageLayout?屬性更改時發(fā)生。(從?Control?繼承。)
BindingContextChanged
當?BindingContext?屬性的值更改時發(fā)生。(從?Control?繼承。)
CausesValidationChanged
當?CausesValidation?屬性的值更改時發(fā)生。(從?Control?繼承。)
ChangeUICues
焦點或鍵盤用戶界面 (UI) 提示更改時發(fā)生。(從?Control?繼承。)
Click
在單擊控件時發(fā)生。(從?Control?繼承。)
ClientSizeChanged
當?ClientSize?屬性的值更改時發(fā)生。(從?Control?繼承。)
Closed
關閉窗體時發(fā)生。
Closing
關閉窗體時發(fā)生。
ContextMenuChanged
當?ContextMenu?屬性的值更改時發(fā)生。(從?Control?繼承。)
ContextMenuStripChanged
當?ContextMenuStrip?屬性的值更改時發(fā)生。(從?Control?繼承。)
ControlAdded
在將新控件添加到?Control.ControlCollection?時發(fā)生。(從?Control?繼承。)
ControlRemoved
在從?Control.ControlCollection?移除控件時發(fā)生。(從?Control?繼承。)
CursorChanged
當?Cursor?屬性的值更改時發(fā)生。(從?Control?繼承。)
Deactivate
當窗體失去焦點并不再是活動窗體時發(fā)生。
Disposed
當通過調(diào)用?Dispose?方法釋放組件時發(fā)生。(從?Component?繼承。)
DockChanged
當?Dock?屬性的值更改時發(fā)生。(從?Control?繼承。)
DoubleClick
在雙擊控件時發(fā)生。(從?Control?繼承。)
DragDrop
拖放操作完成時發(fā)生。(從?Control?繼承。)
DragEnter
在將對象拖入控件的邊界時發(fā)生。(從?Control?繼承。)
DragLeave
將對象拖出控件的邊界時發(fā)生。(從?Control?繼承。)
DragOver
在將對象拖到控件的邊界上發(fā)生。(從?Control?繼承。)
EnabledChanged
在?Enabled?屬性值更改后發(fā)生。(從?Control?繼承。)
Enter
進入控件時發(fā)生。(從?Control?繼承。)
FontChanged
在?Font?屬性值更改時發(fā)生。(從?Control?繼承。)
ForeColorChanged
在?ForeColor?屬性值更改時發(fā)生。(從?Control?繼承。)
FormClosed
關閉窗體后發(fā)生。
FormClosing
關閉窗體前發(fā)生。
GiveFeedback
在執(zhí)行拖動操作期間發(fā)生。(從?Control?繼承。)
GotFocus
在控件接收焦點時發(fā)生。(從?Control?繼承。)
HandleCreated
在為控件創(chuàng)建句柄時發(fā)生。(從?Control?繼承。)
HandleDestroyed
在控件的句柄處于銷毀過程中時發(fā)生。(從?Control?繼承。)
HelpButtonClicked
單擊“幫助”按鈕時發(fā)生。
HelpRequested
用戶請求控件幫助時發(fā)生。(從?Control?繼承。)
ImeModeChanged
在?ImeMode?屬性更改后發(fā)生。(從?Control?繼承。)
InputLanguageChanged
更改窗體的輸入語言后發(fā)生。
InputLanguageChanging
當用戶嘗試更改窗體的輸入語言時發(fā)生。
Invalidated
控件的顯示要求重新繪制時發(fā)生。(從?Control?繼承。)
KeyDown
在控件有焦點的情況下按下鍵時發(fā)生。(從?Control?繼承。)
KeyPress
在控件有焦點的情況下字符、空格或退格鍵時發(fā)生。(從?Control?繼承。)
KeyUp
在控件有焦點的情況下釋放鍵時發(fā)生。(從?Control?繼承。)
Layout
在控件應重新定位其子控件時發(fā)生。(從?Control?繼承。)
Leave
在輸入焦點離開控件時發(fā)生。(從?Control?繼承。)
Load
在第一次顯示窗體前發(fā)生。
LocationChanged
在?Location?屬性值更改后發(fā)生。(從?Control?繼承。)
LostFocus
在控件失去焦點時發(fā)生。(從?Control?繼承。)
MarginChanged
當?Margin?屬性更改時發(fā)生。
MaximizedBoundsChanged
在?MaximizedBounds?屬性的值更改后發(fā)生。
MaximumSizeChanged
在?MaximumSize?屬性的值更改后發(fā)生。
MdiChildActivate
在多文檔界面 (MDI) 應用程序內(nèi)激活或關閉 MDI 子窗體時發(fā)生。
MenuComplete
當窗體菜單失去焦點時發(fā)生。
MenuStart
當窗體菜單接收焦點時發(fā)生。
MinimumSizeChanged
在?MinimumSize?屬性的值更改后發(fā)生。
MouseCaptureChanged
當控件失去鼠標捕獲時發(fā)生。(從?Control?繼承。)
MouseClick
用鼠標單擊控件時發(fā)生。(從?Control?繼承。)
MouseDoubleClick
用鼠標雙擊控件時發(fā)生。(從?Control?繼承。)
MouseDown
當鼠標指針位于控件上并按下鼠標鍵時發(fā)生。(從?Control?繼承。)
MouseEnter
在鼠標指針進入控件時發(fā)生。(從?Control?繼承。)
MouseHover
在鼠標指針停放在控件上時發(fā)生。(從?Control?繼承。)
MouseLeave
在鼠標指針離開控件時發(fā)生。(從?Control?繼承。)
MouseMove
在鼠標指針移到控件上時發(fā)生。(從?Control?繼承。)
MouseUp
在鼠標指針在控件上并釋放鼠標鍵時發(fā)生。(從?Control?繼承。)
MouseWheel
在控件有焦點且鼠標輪移動時發(fā)生。(從?Control?繼承。)
Move
在移動控件時發(fā)生。(從?Control?繼承。)
PaddingChanged
在控件空白區(qū)更改時發(fā)生。(從?Control?繼承。)
Paint
在重繪控件時發(fā)生。(從?Control?繼承。)
ParentChanged
在?Parent?屬性值更改時發(fā)生。(從?Control?繼承。)
PreviewKeyDown
在焦點位于此控件上的情況下,當有按鍵動作時發(fā)生(在?KeyDown?事件之前發(fā)生)。(從Control?繼承。)
QueryAccessibilityHelp
在?AccessibleObject?為輔助功能應用程序提供幫助時發(fā)生。(從?Control?繼承。)
QueryContinueDrag
在拖放操作期間發(fā)生,并且允許拖動源確定是否應取消拖放操作。(從?Control?繼承。)
RegionChanged
當?Region?屬性的值更改時發(fā)生。(從?Control?繼承。)
Resize
在調(diào)整控件大小時發(fā)生。(從?Control?繼承。)
ResizeBegin
窗體進入大小調(diào)整模式時發(fā)生。
ResizeEnd
窗體退出大小調(diào)整模式時發(fā)生。
RightToLeftChanged
在?RightToLeft?屬性值更改時發(fā)生。(從?Control?繼承。)
RightToLeftLayoutChanged
更改?RightToLeftLayout?屬性值之后發(fā)生。
Scroll
用戶或代碼滾動工作區(qū)時發(fā)生。(從?ScrollableControl?繼承。)
Shown
只要窗體是首次顯示就發(fā)生。
SizeChanged
在?Size?屬性值更改時發(fā)生。(從?Control?繼承。)
StyleChanged
在控件樣式更改時發(fā)生。(從?Control?繼承。)
SystemColorsChanged
系統(tǒng)顏色更改時發(fā)生。(從?Control?繼承。)
TabIndexChanged
此 API 支持 產(chǎn)品 基礎結構,不能在代碼中直接使用。?當?TabIndex?屬性的值更改時發(fā)生。
TabStopChanged
當?TabStop?屬性更改時發(fā)生。
TextChanged
在?Text?屬性值更改時發(fā)生。(從?Control?繼承。)
Validated
在控件完成驗證時發(fā)生。(從?Control?繼承。)
Validating
在控件驗證時發(fā)生。(從?Control?繼承。)
VisibleChanged
在?Visible?屬性值更改時發(fā)生。(從?Control?繼承。)
TextBox1_TextChanged() 'TextBox1.text屬性改變時發(fā)生
?Label1_Click() 'Label1被鼠標點擊時發(fā)生
?MenuItem1_Click() 'MenuItem1被鼠標點擊時發(fā)生
?Label1_MouseDown() '鼠標左鍵在Label1上按下時發(fā)生
?Label1_DoubleClick() '有點難我也不太清楚,在MSDN上查了下:
雙擊操作由用戶操作系統(tǒng)的鼠標設置確定。用戶可以設置兩次單擊鼠標按鈕之間的時間以便將這兩次單擊認為是雙擊而不是兩次單擊。每當雙擊控件時,就會引發(fā) Click 事件。例如,如果您有 Form 的 Click 和 DoubleClick 事件的事件處理程序,則當雙擊該窗體并同時調(diào)用這兩個方法時,會引發(fā) Click 和 DoubleClick 事件。如果雙擊一個控件并且該控件不支持 DoubleClick 事件,則 Click 事件可能被引發(fā)兩次。
Label1_MouseUp() '鼠標左鍵在Label1上放開時發(fā)生,一般與Label1_MouseDown()搭配使用
?TextBox2_MouseMove() '鼠標停留在TextBox2上時發(fā)生
?Form1_load() '加載窗體時發(fā)生
?Form1_click() '點擊窗體時發(fā)生
?Form1_Resize() '窗體調(diào)整大小后發(fā)生
Form1_KeyPress() '當窗體有焦點鍵盤有操作時發(fā)生
?Form1_KeyDown() '當窗體具有焦點并鍵盤有按鍵按下時發(fā)生
?Form1_KeyUp() '當窗體焦點并鍵盤有按鍵放開時發(fā)生