Aracılığıyla paylaş


RaiseEvent Deyimi

Bir sınıf, form veya belge içinde modül düzeyinde bildirilen bir olayı tetikler.

Sözdizimi

RaiseEvent eventname[( argumentlist )]  

Parçalar

eventname
Gerekli. Tetikleme olayının adı.

argumentlist
Opsiyonel. Değişkenlerin, dizilerin veya ifadelerin virgülle ayrılmış listesi. Bağımsız argumentlist değişken parantez içine alınmalıdır. Bağımsız değişken yoksa parantezlerin atlanması gerekir.

Açıklamalar

Gerekli eventname , modülde bildirilen bir olayın adıdır. Visual Basic değişken adlandırma kurallarına uyar.

Olay, oluşturulduğu modülde bildirilmemişse bir hata oluşur. Aşağıdaki kod parçası bir olay bildirimini ve olayın oluşturulduğu yordamı gösterir.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

Modülde açıkça bildirilmeyen olayları tetikleme amacıyla kullanamazsınız RaiseEvent . Örneğin, tüm formlar bir Click olayı öğesinden System.Windows.Forms.Formdevralır ve türetilmiş bir biçimde kullanılarak RaiseEvent yükseltilemez. Form modülünde bir Click olay bildirirseniz, formun kendi Click olayını gölgeler. Yine de yöntemini çağırarak formun ClickOnClick olayını çağırabilirsiniz.

Varsayılan olarak, Visual Basic'te tanımlanan bir olay, olay işleyicilerini bağlantıların kurulma sırasına göre yükseltir. Olayların parametreleri olabileceği ByRef için, geç bağlanan bir işlem önceki bir olay işleyicisi tarafından değiştirilmiş parametreleri alabilir. Olay işleyicileri yürütüldükten sonra, olayı tetikleyen alt yordama denetim döndürülür.

Uyarı

Paylaşılmayan olaylar, bildirildikleri sınıfın oluşturucusunda tetiklenmemelidir. Bu tür olaylar çalışma zamanı hatalarına neden olmasa da, ilişkili olay işleyicileri tarafından yakalanamayabilir. Oluşturucudan Shared olay oluşturmanız gerekiyorsa paylaşılan bir olay oluşturmak için değiştiriciyi kullanın.

Uyarı

Özel bir olay tanımlayarak olayların varsayılan davranışını değiştirebilirsiniz. Özel olaylar için deyimi olayın RaiseEventRaiseEvent erişimcisini çağırır. Özel olaylar hakkında daha fazla bilgi için bkz. Olay Deyimi.

Örnek 1

Aşağıdaki örnek, 10 ile 0 saniyeleri saymak için olayları kullanır. Kod, deyimi dahil olmak üzere olayla ilgili yöntemlerin, özelliklerin ve deyimlerin birkaçını RaiseEvent gösterir.

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, 10 ila 0 saniye arasında sayan ve konsoldaki ilerleme durumunu görüntüleyen bir zamanlayıcı gösterir. Geri sayım tamamlandığında "Bitti" görüntülenir.

Zamanlayıcıdaki olayları işlemek için sınıfınızda bir WithEvents değişken bildirin:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Örnek 2

Olay işleyicilerini ve zamanlayıcı mantığını uygulamak için aşağıdaki kodu ekleyin. Bu örnekte zamanlayıcı güncelleştirildiğinde veya tamamlandığında olay işleyicilerini bilgilendirmek için deyiminin nasıl kullanılacağı RaiseEvent gösterilmektedir.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        Loop
        RaiseEvent Finished()
    End Sub
End Class

Yukarıdaki örneği çalıştırdığınızda, saniyeleri 10'dan 0'a kadar saymaya başlar ve konsoldaki ilerlemeyi görüntüler. Tam süre (10 saniye) sona erdiğinde " Bitti" görüntülenir.

Ayrıca bakınız