Event Deyimi
Kullanıcı tanımlı bir olay bildirir.
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
Bölümler
| Bölüm | Description |
|---|---|
attrlist |
İsteğe bağlı. Bu olay için uygulanan özniteliklerin listesi. Birden çok öznitelik virgülle ayrılır. Öznitelik listesini açılı ayraçlar (" < " ve " > ") içine almalısınız. |
accessmodifier |
İsteğe bağlı. Olaya hangi kodun erişebileceğini belirtir. Aşağıdakilerden biri olabilir: - Public— onu bildiren öğeye erişebilen herhangi bir kod, buna erişebilir. - Korumalı— yalnızca kendi sınıfı veya türetilmiş bir sınıf içindeki kodlar buna erişebilir. - Friend— yalnızca aynı derlemede bulunan kod erişebilir. - Özel— yalnızca bu öğeyi bildiren kod, ona erişebilir. - Yalnızca olayın sınıfında, türetilmiş bir sınıfta veya aynı derlemede bulunan yalnızca arkadaşkod, buna erişebilir. - Yalnızca olayın sınıfında veya aynı derlemede bulunan türetilmiş bir sınıfta bulunan özel korumalıkod, buna erişebilir. |
Shared |
İsteğe bağlı. Bu olayın bir sınıfın veya yapının belirli bir örneğiyle ilişkilendirilmediği belirtir. |
Shadows |
İsteğe bağlı. Bu olayın, bir temel sınıfta aynı adlı programlama öğesi veya aşırı yüklenmiş öğeler kümesini yeniden bildirdiğini ve gizlediğini belirtir. Herhangi bir tür tanımlanmış öğeyi başka bir tür ile gölgelendirebilmeniz gerekir. Gölgelendirilmiş bir öğe, gölgeleme öğesinin erişilemez olması dışında, kendisini gölgelendirilebilen türetilmiş sınıfın içinden kullanılamaz. Örneğin, bir öğe bir Private temel sınıf öğesini gölerse, öğesine erişim izni olmayan kod, Private bunun yerine temel sınıf öğesine erişir. |
eventname |
Gereklidir. Olayın adı; Standart değişken adlandırma kurallarını izler. |
parameterlist |
İsteğe bağlı. Bu olayın parametrelerini temsil eden yerel değişkenlerin listesi. Parametre listesini parantez içine almalısınız. |
Implements |
İsteğe bağlı. Bu olayın bir arabirimin olayını uyguladığını gösterir. |
implementslist |
Sağlanırsa gereklidir Implements . SubUygulanan yordamların listesi. Birden çok yordam virgüllerle ayrılır:ımplementedprocedure [, ımplementedprocedure ...] Her birinin implementedprocedure aşağıdaki söz dizimi ve parçaları vardır:interface.definedname- interface İstenir. Bu yordamın kendisini içeren sınıf veya yapının uyguladığı arabirimin adı.- Definedname İstenir. Yordamın tanımlandığı ad interface . Bu name , tanımlanan yordamı uygulamak için bu yordamın kullandığı ad ile aynı olmak zorunda değildir. |
Custom |
Gereklidir. Olarak belirtilen olaylar Custom özel AddHandler , RemoveHandler ve RaiseEvent erişimcileri tanımlamalıdır. |
delegatename |
İsteğe bağlı. Olay işleyicisi imzasını belirten bir temsilcinin adı. |
AddHandler |
Gereklidir. AddHandlerBir olay işleyicisi eklendiğinde, açıkça AddHandler deyimi kullanarak veya yan tümcesini kullanarak örtülü olarak yürütülecek deyimleri belirten bir erişimci bildirir Handles . |
End AddHandler |
Gereklidir. Bloğu sonlandırır AddHandler . |
value |
Gereklidir. Parametre adı. |
RemoveHandler |
Gereklidir. RemoveHandlerBir olay işleyicisi deyimi kullanılarak kaldırıldığında yürütülecek deyimleri belirten bir erişimci bildirir RemoveHandler . |
End RemoveHandler |
Gereklidir. Bloğu sonlandırır RemoveHandler . |
RaiseEvent |
Gereklidir. RaiseEventOlay deyimi kullanılarak oluşturulduğunda yürütülecek deyimleri belirten bir erişimci bildirir RaiseEvent . Genellikle, ve erişimcileri tarafından tutulan temsilcilerin listesini çağırır AddHandler RemoveHandler . |
End RaiseEvent |
Gereklidir. Bloğu sonlandırır RaiseEvent . |
delegatesignature |
Gereklidir. Temsilcinin gerektirdiği parametrelerle eşleşen parametrelerin listesi delegatename . Parametre listesini parantez içine almalısınız. |
statements |
İsteğe bağlı. AddHandler, Ve yöntemlerinin gövdelerini içeren deyimler RemoveHandler RaiseEvent . |
End Event |
Gereklidir. Bloğu sonlandırır Event . |
Açıklamalar
Olay bildirildiğinde RaiseEvent olayı yükseltmek için ifadesini kullanın. Tipik bir olay, aşağıdaki parçalar gösterildiği gibi bildirilebilecek ve ortaya çıkabilir:
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
Aşağıdaki özel durumlarla birlikte, yordam bağımsız değişkenleri yaptığınız gibi olay bağımsız değişkenlerini bildirebilirsiniz: olaylarda adlandırılmış bağımsız değişkenler, ParamArray bağımsız değişkenler veya bağımsız değişkenler bulunamaz Optional . Olayların dönüş değeri yok.
Bir olayı işlemek için, ya da ifadesini kullanarak bir olay işleyicisi alt yordamı ile ilişkilendirmeniz gerekir Handles AddHandler . Altyordam ve olayın imzaları eşleşmelidir. Paylaşılan bir olayı işlemek için, ifadesini kullanmanız gerekir AddHandler .
EventYalnızca modül düzeyinde kullanabilirsiniz. Bu, bir olayın bildirim bağlamının bir sınıf, yapı, modül veya arabirim olması ve kaynak dosya, ad alanı, yordam veya blok olması gerektiği 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ünde ilk sözdizimini kullanabilirsiniz. Ancak, bazı senaryolar etkinliğin ayrıntılı davranışı üzerinde daha fazla denetime sahip olmanızı gerektirir. Anahtar sözcüğünü kullanan bu konunun sözdizimi bölümündeki son sözdizimi Custom , özel olayları tanımlamanızı sağlayarak bu denetimi sağlar. Özel bir olayda, kod bir olay işleyicisini olaya eklendiğinde veya olaya kaldırdığında ya da kod olayı harekete geçirirse 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 arasındaki saniye sayısını saymak için olayları kullanır. Kod, olayla ilgili yöntemlerin, özelliklerin ve deyimlerden birkaçını gösterir. Bu, RaiseEvent ifadesini içerir.
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şleyicilere sahip olabilir. Sınıf olayı harekete geçirirse, bu olay nesnenin bu örneğine yönelik olayları işlemek için seçilmiş olan her sınıfta oluşturulur.
Örnek ayrıca bir Form1 düğme ( Button1 ) ve metin kutusu () içeren bir form () kullanır TextBox1 . Düğmeye tıkladığınızda, ilk metin kutusu 10 ila 0 saniye arasında bir geri sayım görüntüler. Tam süre (10 saniye) geçtiğinde, ilk metin kutusunda "bitti" görüntülenir.
Kodu, Form1 formun ilk ve Terminal durumlarını belirtir. Ayrıca, olaylar oluşturulduğunda yürütülen kodu içerir.
bu örneği kullanmak için yeni bir Windows Forms projesi açın. Ardından adlı bir Button1 düğmeyi ve adlı metin kutusunu TextBox1 ana forma Form1 ekleyin. Ardından forma sağ tıklayın ve Kod Düzenleyicisi'ni açmak için Kodu Görüntüle'ye tıklayın.
sınıfının WithEvents bildirim bölümüne bir değişken Form1 ekleyin:
Private WithEvents mText As TimerState
aşağıdaki kodu koduna Form1 ekleyin. veya gibi mevcut olan tüm yinelenen yordamları Form_Load Button_Click 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şlat etiketli düğmeye tıklayın. İlk metin kutusu saniyeleri saymaya başlar. Tam süre (10 saniye) doldu, ilk metin kutusunda "Bitti" görüntülenir.
Not
yöntemi, My.Application.DoEvents formla aynı şekilde olayları işlemez. Formun olayları doğrudan işlemesi için çoklu iş parçacığı kullanımı kullanabilirsiniz. Daha fazla bilgi için bkz. Yönetilen İş Parçacığı.