Aracılığıyla paylaş


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 interfacetanımlandığı ad. Bu, bu yordamın tanımlı yordamı uygulamak için kullandığı adla aynı nameolması gerekmez.
Custom Gerekli. olarak Custom bildirilen olaylar özel AddHandler, RemoveHandlerve 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ı. , RemoveHandlerve RaiseEvent yöntemlerinin AddHandlergö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 (Button1TextBox1) 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 Form1ekleyin. veya Button_Clickgibi 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.

Ayrıca bkz.