Händelseuttryck
Deklarerar en användardefinierad händelse.
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Delar
Delvis | beskrivning |
---|---|
attrlist |
Valfritt. Lista över attribut som gäller för den här händelsen. Flera attribut avgränsas med kommatecken. Du måste omsluta attributlistan i vinkelparenteser ("< " och "> "). |
accessmodifier |
Valfritt. Anger vilken kod som kan komma åt händelsen. Kan vara något av följande: - Offentlig – all kod som kan komma åt elementet som deklarerar det kan komma åt det. - Skyddad – endast kod i dess klass eller en härledd klass kan komma åt den. - Vän – endast kod i samma sammansättning kan komma åt den. - Privat – endast kod i elementet som deklarerar att det kan komma åt det. - Skyddad kod endast för vän i händelsens klass, en härledd klass eller samma sammansättning kan komma åt den. - Privat kod endast skyddad i händelsens klass eller en härledd klass i samma sammansättning kan komma åt den. |
Shared |
Valfritt. Anger att den här händelsen inte är associerad med en specifik instans av en klass eller struktur. |
Shadows |
Valfritt. Anger att den här händelsen redeclares och döljer ett identiskt namngivet programmeringselement, eller en uppsättning överlagrade element, i en basklass. Du kan skugga alla typer av deklarerade element med någon annan typ. Ett skuggat element är inte tillgängligt från den härledda klassen som skuggar det, förutom där skuggelementet inte är tillgängligt. Om ett Private element till exempel skuggar ett basklasselement, kommer kod som inte har behörighet att komma åt elementet Private att komma åt basklasselementet i stället. |
eventname |
Obligatoriska. Namnet på händelsen; följer namngivningskonventionerna för standardvariabler. |
parameterlist |
Valfritt. Lista över lokala variabler som representerar parametrarna för den här händelsen. Du måste omsluta parameterlistan inom parenteser. |
Implements |
Valfritt. Anger att den här händelsen implementerar en händelse av ett gränssnitt. |
implementslist |
Krävs om Implements anges. Sub Lista över procedurer som implementeras. Flera procedurer avgränsas med kommatecken:implementedprocedure [ , implementedprocedure ... ] Var implementedprocedure och en har följande syntax och delar:interface .definedname - interface -Krävs. Namnet på ett gränssnitt som den här proceduren innehåller klass eller struktur implementerar.- Definedname -Krävs. Namn med vilket proceduren definieras i interface . Detta behöver inte vara samma som name , namnet som den här proceduren använder för att implementera den definierade proceduren. |
Custom |
Obligatoriska. Händelser som deklareras som Custom måste definiera anpassade AddHandler , RemoveHandler och RaiseEvent accessorer. |
delegatename |
Valfritt. Namnet på ett ombud som anger händelsehanterarsignaturen. |
AddHandler |
Obligatoriska. Deklarerar en AddHandler accessor som anger vilka instruktioner som ska köras när en händelsehanterare läggs till, antingen explicit med hjälp av -instruktionen AddHandler eller implicit med hjälp Handles av -satsen. |
End AddHandler |
Obligatoriska. AddHandler Avslutar blocket. |
value |
Obligatoriska. Parameternamn. |
RemoveHandler |
Obligatoriska. Deklarerar en RemoveHandler accessor som anger vilka instruktioner som ska köras när en händelsehanterare tas bort med hjälp av -instruktionen RemoveHandler . |
End RemoveHandler |
Obligatoriska. RemoveHandler Avslutar blocket. |
RaiseEvent |
Obligatoriska. Deklarerar en RaiseEvent accessor som anger vilka instruktioner som ska köras när händelsen genereras med hjälp av -instruktionen RaiseEvent . Vanligtvis anropar detta en lista över ombud som AddHandler underhålls av och RemoveHandler -åtkomstarna. |
End RaiseEvent |
Obligatoriska. RaiseEvent Avslutar blocket. |
delegatesignature |
Obligatoriska. Lista över parametrar som matchar de parametrar som krävs av ombudet delegatename . Du måste omsluta parameterlistan inom parenteser. |
statements |
Valfritt. Instruktioner som innehåller organen i AddHandler metoderna , RemoveHandler och RaiseEvent . |
End Event |
Obligatoriska. Event Avslutar blocket. |
Kommentarer
När händelsen har deklarerats använder du -instruktionen RaiseEvent
för att skapa händelsen. En typisk händelse kan deklareras och aktiveras enligt följande fragment:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Kommentar
Du kan deklarera händelseargument precis som du gör argument för procedurer, med följande undantag: händelser kan inte ha namngivna argument, ParamArray
argument eller Optional
argument. Händelser har inga returvärden.
Om du vill hantera en händelse måste du associera den med en underrutin för händelsehanterare med hjälp av instruktionen Handles
eller AddHandler
. Underrutinens signaturer och händelsen måste matcha. Om du vill hantera en delad händelse måste du använda -instruktionen AddHandler
.
Du kan bara använda Event
på modulnivå. Det innebär att deklarationskontexten för en händelse måste vara en klass, struktur, modul eller gränssnitt och får inte vara en källfil, ett namnområde, en procedur eller ett block. Mer information finns i Deklarationskontexter och standardåtkomstnivåer.
I de flesta fall kan du använda den första syntaxen i avsnittet Syntax i det här avsnittet för att deklarera händelser. Vissa scenarier kräver dock att du har mer kontroll över händelsens detaljerade beteende. Den sista syntaxen i avsnittet Syntax i det här avsnittet, som använder nyckelordet, ger den Custom
kontrollen genom att du kan definiera anpassade händelser. I en anpassad händelse anger du exakt vad som händer när koden lägger till eller tar bort en händelsehanterare till eller från händelsen, eller när koden genererar händelsen. Exempel finns i How to: Declare Custom Events To Preserve Memory (Deklarera anpassade händelser för att spara minne ) och How to: Declare Custom Events To Avoid Blocking (Deklarera anpassade händelser för att undvika blockering).
Exempel
I följande exempel används händelser för att räkna ned sekunder från 10 till 0. Koden illustrerar flera av de händelserelaterade metoderna, egenskaperna och -instruktionerna. Detta inkluderar -instruktionen RaiseEvent
.
Klassen som genererar en händelse är händelsekällan och de metoder som bearbetar händelsen är händelsehanterarna. En händelsekälla kan ha flera hanterare för de händelser som genereras. När klassen genererar händelsen utlöses händelsen för varje klass som har valt att hantera händelser för den instansen av objektet.
I exemplet används också ett formulär (Form1
) med en knapp (Button1
) och en textruta (TextBox1
). När du klickar på knappen visar den första textrutan en nedräkning från 10 till 0 sekunder. När heltiden (10 sekunder) har förflutit visar den första textrutan "Klar".
Koden för Form1
anger formulärets inledande tillstånd och terminaltillstånd. Den innehåller också den kod som körs när händelser genereras.
Om du vill använda det här exemplet öppnar du ett nytt Windows Forms-projekt. Lägg sedan till en knapp med namnet Button1
och en textruta med namnet TextBox1
i huvudformuläret med namnet Form1
. Högerklicka sedan på formuläret och klicka på Visa kod för att öppna kodredigeraren.
Lägg till en WithEvents
variabel i deklarationsavsnittet i Form1
klassen:
Private WithEvents mText As TimerState
Lägg till följande kod i koden för Form1
. Ersätt eventuella duplicerade procedurer som kan finnas, till exempel Form_Load
eller Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Tryck på F5 för att köra föregående exempel och klicka på knappen Med etiketten Start. Den första textrutan börjar räkna ned sekunderna. När heltiden (10 sekunder) har förflutit visar den första textrutan "Klar".
Kommentar
Metoden My.Application.DoEvents
bearbetar inte händelser på samma sätt som formuläret gör. Om du vill aktivera formuläret för att hantera händelserna direkt kan du använda multitrådning. Mer information finns i Hanterad trådning.