Event Deyimi
Kullanıcı tanımlı bir olay bildirir.
Sözdizimi
[ <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
Parça
Bölüm | Açıklama |
---|---|
attrlist |
isteğe bağlı. Bu olaya uygulanan özniteliklerin listesi. Birden çok öznitelik virgülle ayrılır. Öznitelik Listesi'ni açılı ayraçlar ("< " ve "> ") içine almanız gerekir. |
accessmodifier |
isteğe bağlı. Olaya hangi kodun erişebileceğini belirtir. Aşağıdakilerden biri olabilir: - Genel— öğesini bildiren öğeye erişebilen tüm kodlar bu öğeye erişebilir. - Korumalı: Yalnızca sınıfındaki koda veya türetilmiş bir sınıfa erişebilir. - Arkadaş; yalnızca aynı derlemedeki kod bu koda erişebilir. - Özel— yalnızca öğedeki buna erişebildiğini bildiren kod. - Olayın sınıfında, türetilmiş bir sınıfta veya aynı derlemede yalnızca arkadaş kodu korumalı koda erişebilir. - Olayın sınıfında özel Yalnızca korumalı koda veya aynı derlemedeki türetilmiş bir sınıfa erişebilir. |
Shared |
isteğe bağlı. Bu olayın bir sınıfın veya yapının belirli bir örneğiyle ilişkilendirilmediğini belirtir. |
Shadows |
isteğe bağlı. Bu olayın aynı adlı programlama öğesini veya aşırı yüklenmiş öğe kümesini temel sınıfta yeniden adlandırdığını ve gizlediğini gösterir. Bildirilen herhangi bir öğe türünü başka bir türle gölgeleyebilirsiniz. Gölgeli öğe, gölgelendirme öğesinin erişilemez olduğu durumlar dışında, gölgelenen öğeyi gölgeleyen türetilmiş sınıfın içinden kullanılamaz. Örneğin, bir Private öğe temel sınıf öğesini gölgelerse, öğeye erişme Private izni olmayan kod bunun yerine temel sınıf öğesine erişir. |
eventname |
Gerekli. Olayın adı; standart değişken adlandırma kurallarını izler. |
parameterlist |
isteğe bağlı. Bu olayın parametrelerini temsil eden yerel değişkenlerin listesi. Parametre Listesi'ni parantez içine almanız gerekir. |
Implements |
isteğe bağlı. Bu olayın bir arabirim olayı uyguladığını gösterir. |
implementslist |
Sağlanırsa Implements gereklidir. Sub Uygulanan yordamların listesi. Birden çok yordam virgülle ayrılır:implementedprocedure [ , implementedprocedure ... ] Her implementedprocedure birinin söz dizimi ve bölümleri vardır:interface .definedname - interface -Gerekli. Bu yordamın içerdiği sınıf veya yapının uyguladığı arabirimin adı.- Definedname -Gerekli. Yordamın içinde interface tanımlandığı ad. Bu, bu yordamın tanımlı yordamı uygulamak için kullandığı adla aynı name olması gerekmez. |
Custom |
Gerekli. olarak Custom bildirilen olaylar özel AddHandler , RemoveHandler ve RaiseEvent erişimcilerini tanımlamalıdır. |
delegatename |
isteğe bağlı. Olay işleyici imzasını belirten bir temsilcinin adı. |
AddHandler |
Gerekli. Açıkça AddHandler deyimini kullanarak veya yan tümcesini kullanarak AddHandler örtük olarak bir olay işleyicisi eklendiğinde yürütülecek deyimleri belirten bir erişimci bildirir Handles . |
End AddHandler |
Gerekli. Bloğu sonlandırır AddHandler . |
value |
Gerekli. Parametre adı. |
RemoveHandler |
Gerekli. Bir RemoveHandler olay işleyicisi deyimi kullanılarak kaldırıldığında yürütülecek deyimleri belirten bir erişimci bildirir RemoveHandler . |
End RemoveHandler |
Gerekli. Bloğu sonlandırır RemoveHandler . |
RaiseEvent |
Gerekli. Olay deyimi kullanılarak tetiklendiğinde yürütülecek deyimleri belirten bir RaiseEvent erişimci bildirir RaiseEvent . Genellikle, bu, ve RemoveHandler erişimcileri tarafından tutulan temsilcilerin AddHandler listesini çağırır. |
End RaiseEvent |
Gerekli. Bloğu sonlandırır RaiseEvent . |
delegatesignature |
Gerekli. Temsilcinin gerektirdiği parametrelerle eşleşen parametrelerin delegatename listesi. Parametre Listesi'ni parantez içine almanız gerekir. |
statements |
isteğe bağlı. , RemoveHandler ve RaiseEvent yöntemlerinin AddHandler gövdelerini içeren deyimler. |
End Event |
Gerekli. Bloğu sonlandırır Event . |
Açıklamalar
Olay bildirildikten sonra, olayı yükseltmek için deyimini kullanın RaiseEvent
. Aşağıdaki parçalarda gösterildiği gibi tipik bir olay bildirilebilir ve tetiklenebilir:
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
Not
Olay bağımsız değişkenlerini, yordam bağımsız değişkenlerini yaptığınız gibi, aşağıdaki özel durumlarla bildirebilirsiniz: olayların adlandırılmış bağımsız değişkenleri, ParamArray
bağımsız değişkenleri veya Optional
bağımsız değişkenleri olamaz. Olayların dönüş değerleri yoktur.
Bir olayı işlemek için, veya AddHandler
deyimini kullanarak olayı bir olay işleyicisi alt yordamla Handles
ilişkilendirmeniz gerekir. Alt yordam ve olayın imzaları eşleşmelidir. Paylaşılan bir olayı işlemek için deyimini AddHandler
kullanmanız gerekir.
Yalnızca modül düzeyinde kullanabilirsiniz Event
. Bu, bir olayın bildirim bağlamının bir sınıf, yapı, modül veya arabirim olması gerektiği ve kaynak dosya, ad alanı, yordam veya blok olamayacağı anlamına gelir. Daha fazla bilgi için bkz . Bildirim Bağlamları ve Varsayılan Erişim Düzeyleri.
Çoğu durumda, olayları bildirmek için bu konunun Söz Dizimi bölümündeki ilk söz dizimini kullanabilirsiniz. Ancak bazı senaryolarda olayın ayrıntılı davranışı üzerinde daha fazla denetim sahibi olmanız gerekir. Bu konunun söz dizimi bölümünde yer alan ve anahtar sözcüğünü Custom
kullanan son söz dizimi, özel olayları tanımlamanıza olanak tanıyarak bu denetimi sağlar. Özel bir olayda, kod olaya olay işleyicisi eklediğinde veya olaydan olay işleyicisini kaldırdığında ya da kod olayı tetiklediğinde tam olarak ne olduğunu belirtirsiniz. Örnekler için bkz . Nasıl yapılır: Belleği Korumak için Özel Olaylar Bildirme ve Nasıl Yapılır: Engellemeyi Önlemek için Özel Olayları Bildirme.
Örnek
Aşağıdaki örnek, 10 ile 0 saniyeleri saymak için olayları kullanır. Kod, olayla ilgili yöntemlerin, özelliklerin ve deyimlerin birkaçını gösterir. Buna deyimi dahildir RaiseEvent
.
Olay oluşturan sınıfı olay kaynağıdır ve olayı işleyen yöntemler olay işleyicileridir. Bir olay kaynağı, oluşturduğu olaylar için birden çok işleyiciye sahip olabilir. Sınıf olayı yükselttiğinde, bu olay nesnenin bu örneği için olayları işlemeyi seçen her sınıfta oluşturulur.
Örnek ayrıca düğme () ve metin kutusu (Form1
) içeren bir form (Button1
TextBox1
) kullanır. Düğmeye tıkladığınızda, ilk metin kutusunda 10 ila 0 saniyelik bir geri sayım görüntülenir. Tam süre (10 saniye) sona erdiğinde, ilk metin kutusunda "Bitti" ifadesi görüntülenir.
için Form1
kod, formun başlangıç ve terminal durumlarını belirtir. Ayrıca olaylar tetiklendiğinde yürütülen kodu da içerir.
Bu örneği kullanmak için yeni bir Windows Forms projesi açın. Ardından ana forma adlı Button1
bir düğme ve adlı TextBox1
bir metin kutusu ekleyin.Form1
Ardından forma sağ tıklayın ve Kodu Görüntüle'ye tıklayarak kod düzenleyicisini açın.
sınıfının bildirimler bölümüne Form1
bir WithEvents
değişken ekleyin:
Private WithEvents mText As TimerState
koduna aşağıdaki kodu Form1
ekleyin. veya Button_Click
gibi Form_Load
var olabilecek yinelenen yordamları değiştirin.
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
Önceki örneği çalıştırmak için F5 tuşuna basın ve Başlangıç etiketli düğmeye tıklayın. İlk metin kutusu saniyeleri saymaya başlar. Tam süre (10 saniye) sona erdiğinde, ilk metin kutusunda "Bitti" ifadesi görüntülenir.
Not
yöntemi, My.Application.DoEvents
olayları formun işlediği gibi işlemez. Formun olayları doğrudan işlemesini sağlamak için çoklu iş parçacığı kullanımını kullanabilirsiniz. Daha fazla bilgi için bkz . Yönetilen İş Parçacığı Oluşturma.