Gebeurtenisinstructie
Declareert een door de gebruiker gedefinieerde gebeurtenis.
Syntaxis
[ <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
generator
Onderdeel | Beschrijving |
---|---|
attrlist |
Optioneel. Lijst met kenmerken die van toepassing zijn op deze gebeurtenis. Meerdere kenmerken worden gescheiden door komma's. U moet de lijst met kenmerken tussen punthaken (< '' en '> ' ) insluiten. |
accessmodifier |
Optioneel. Hiermee geeft u op welke code toegang heeft tot de gebeurtenis. Dit kan een van de volgende zijn: - Openbaar: elke code die toegang heeft tot het element dat aangeeft dat toegang heeft tot het element. - Beveiligd: alleen code binnen de klasse of een afgeleide klasse heeft er toegang toe. - Vriend: alleen code in dezelfde assembly heeft toegang tot deze. - Privé: alleen code in het element dat declareert dat toegang heeft tot het element. - Beveiligde alleen-vriend-code in de klasse van de gebeurtenis, een afgeleide klasse of dezelfde assembly heeft toegang tot deze. - Alleen-privécode in de klasse van de gebeurtenis of een afgeleide klasse in dezelfde assembly heeft er toegang toe. |
Shared |
Optioneel. Hiermee geeft u op dat deze gebeurtenis niet is gekoppeld aan een specifiek exemplaar van een klasse of structuur. |
Shadows |
Optioneel. Geeft aan dat deze gebeurtenis een identiek benoemd programmeerelement, of een set overbelaste elementen, opnieuw declareert en verbergt in een basisklasse. U kunt elk type gedeclareerd element schaduwen met elk ander type. Een schaduwelement is niet beschikbaar vanuit de afgeleide klasse die het schaduwt, behalve waar het schaduwelement niet toegankelijk is. Als een Private element bijvoorbeeld een basisklasse-element schaduwt, heeft code die geen toegang heeft tot het Private element toegang tot het element in plaats daarvan tot het basisklasse-element. |
eventname |
Vereist. Naam van de gebeurtenis; volgt standaard naamconventies voor variabelen. |
parameterlist |
Optioneel. Lijst met lokale variabelen die de parameters van deze gebeurtenis vertegenwoordigen. U moet de lijst met parameters tussen haakjes insluiten. |
Implements |
Optioneel. Geeft aan dat deze gebeurtenis een gebeurtenis van een interface implementeert. |
implementslist |
Vereist indien Implements opgegeven. Lijst met Sub procedures die worden geïmplementeerd. Meerdere procedures worden gescheiden door komma's:implementedprocedure [ , implementprocedure ... ] Elk implementedprocedure heeft de volgende syntaxis en onderdelen:interface .definedname - interface -Vereist. De naam van een interface die deze procedure bevat die klasse of structuur bevat.- Definedname -Vereist. Naam waarmee de procedure is gedefinieerd in interface . Dit hoeft niet hetzelfde te zijn als name , de naam die door deze procedure wordt gebruikt om de gedefinieerde procedure te implementeren. |
Custom |
Vereist. Gebeurtenissen die zijn gedeclareerd als Custom moeten aangepaste AddHandler , RemoveHandler en RaiseEvent accessors definiëren. |
delegatename |
Optioneel. De naam van een gemachtigde die de handtekening van de gebeurtenis-handler opgeeft. |
AddHandler |
Vereist. Declareert een AddHandler accessor, die de instructies opgeeft die moeten worden uitgevoerd wanneer een gebeurtenis-handler wordt toegevoegd, expliciet met behulp van de AddHandler instructie of impliciet met behulp van de Handles component. |
End AddHandler |
Vereist. Hiermee wordt het AddHandler blok beëindigd. |
value |
Vereist. Parameternaam. |
RemoveHandler |
Vereist. Declareert een RemoveHandler accessor, waarmee de instructies worden opgegeven die moeten worden uitgevoerd wanneer een gebeurtenis-handler wordt verwijderd met behulp van de RemoveHandler instructie. |
End RemoveHandler |
Vereist. Hiermee wordt het RemoveHandler blok beëindigd. |
RaiseEvent |
Vereist. Declareert een RaiseEvent accessor, waarmee de instructies worden opgegeven die moeten worden uitgevoerd wanneer de gebeurtenis wordt gegenereerd met behulp van de RaiseEvent instructie. Normaal gesproken roept dit een lijst aan met gemachtigden die worden onderhouden door de AddHandler en RemoveHandler accessors. |
End RaiseEvent |
Vereist. Hiermee wordt het RaiseEvent blok beëindigd. |
delegatesignature |
Vereist. Lijst met parameters die overeenkomen met de parameters die door de delegatename gemachtigde zijn vereist. U moet de lijst met parameters tussen haakjes insluiten. |
statements |
Optioneel. Instructies die de lichamen van de AddHandler , RemoveHandler en RaiseEvent methoden bevatten. |
End Event |
Vereist. Hiermee wordt het Event blok beëindigd. |
Opmerkingen
Zodra de gebeurtenis is gedeclareerd, gebruikt u de RaiseEvent
instructie om de gebeurtenis te genereren. Een typische gebeurtenis kan worden gedeclareerd en gegenereerd, zoals wordt weergegeven in de volgende fragmenten:
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
Notitie
U kunt gebeurtenisargumenten net als argumenten van procedures declareren, met de volgende uitzonderingen: gebeurtenissen kunnen geen benoemde argumenten, ParamArray
argumenten of Optional
argumenten hebben. Gebeurtenissen hebben geen retourwaarden.
Als u een gebeurtenis wilt afhandelen, moet u deze koppelen aan een subroutine van een gebeurtenis-handler met behulp van de of AddHandler
instructieHandles
. De handtekeningen van de subroutine en de gebeurtenis moeten overeenkomen. Als u een gedeelde gebeurtenis wilt afhandelen, moet u de AddHandler
instructie gebruiken.
U kunt alleen op moduleniveau gebruiken Event
. Dit betekent dat de declaratiecontext voor een gebeurtenis een klasse, structuur, module of interface moet zijn en geen bronbestand, naamruimte, procedure of blok kan zijn. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.
In de meeste gevallen kunt u de eerste syntaxis in de sectie Syntaxis van dit onderwerp gebruiken voor het declareren van gebeurtenissen. Sommige scenario's vereisen echter dat u meer controle hebt over het gedetailleerde gedrag van de gebeurtenis. De laatste syntaxis in de sectie Syntaxis van dit onderwerp, die gebruikmaakt van het Custom
trefwoord, biedt dat besturingselement door u in staat te stellen aangepaste gebeurtenissen te definiëren. In een aangepaste gebeurtenis geeft u precies op wat er gebeurt wanneer code een gebeurtenis-handler toevoegt aan of verwijdert uit de gebeurtenis, of wanneer de code de gebeurtenis genereert. Zie Voor voorbeelden : Aangepaste gebeurtenissen declareren voor het besparen van geheugen en het volgende: Aangepaste gebeurtenissen declareren om blokkeren te voorkomen.
Opmerking
In het volgende voorbeeld worden gebeurtenissen gebruikt om seconden van 10 tot en met 0 af te tellen. De code illustreert verschillende gebeurtenismethoden, eigenschappen en instructies. Dit omvat de RaiseEvent
instructie.
De klasse die een gebeurtenis genereert, is de gebeurtenisbron en de methoden die de gebeurtenis verwerken, zijn de gebeurtenis-handlers. Een gebeurtenisbron kan meerdere handlers hebben voor de gebeurtenissen die worden gegenereerd. Wanneer de klasse de gebeurtenis genereert, wordt deze gebeurtenis gegenereerd voor elke klasse die ervoor heeft gekozen gebeurtenissen voor dat exemplaar van het object af te handelen.
In het voorbeeld wordt ook een formulier (Form1
) met een knop (Button1
) en een tekstvak (TextBox1
) gebruikt. Wanneer u op de knop klikt, wordt in het eerste tekstvak een aftelling van 10 tot 0 seconden weergegeven. Wanneer de volledige tijd (10 seconden) is verstreken, wordt in het eerste tekstvak 'Gereed' weergegeven.
De code voor Form1
het specificeert de begin- en terminalstatussen van het formulier. Het bevat ook de code die wordt uitgevoerd wanneer er gebeurtenissen worden gegenereerd.
Als u dit voorbeeld wilt gebruiken, opent u een nieuw Windows Forms-project. Voeg vervolgens een knop toe met de naam Button1
en een tekstvak met de naam TextBox1
Form1
aan het hoofdformulier. Klik vervolgens met de rechtermuisknop op het formulier en klik op Code weergeven om de code-editor te openen.
Voeg een WithEvents
variabele toe aan de declaratiesectie van de Form1
klasse:
Private WithEvents mText As TimerState
Voeg de volgende code toe aan de code voor Form1
. Vervang eventuele dubbele procedures, zoals Form_Load
of 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
Druk op F5 om het vorige voorbeeld uit te voeren en klik op de knop met het label Start. Het eerste tekstvak begint met het aftellen van de seconden. Wanneer de volledige tijd (10 seconden) is verstreken, wordt in het eerste tekstvak 'Gereed' weergegeven.
Notitie
De My.Application.DoEvents
methode verwerkt gebeurtenissen niet op dezelfde manier als het formulier. Als u het formulier wilt inschakelen om de gebeurtenissen rechtstreeks te verwerken, kunt u multithreading gebruiken. Zie Managed Threading voor meer informatie.
Zie ook
- RaiseEvent-instructie
- Implementeert instructie
- Gebeurtenissen
- AddHandler-instructie
- RemoveHandler-instructie
- Behandelt
- Instructie voor gemachtigden
- Procedure: Aangepaste gebeurtenissen declareren om geheugen te besparen
- Procedure: Aangepaste gebeurtenissen declareren om blokkeren te voorkomen
- Gedeelde
- Schaduwen