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ığı.

Ayrıca bkz.