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ça

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

argumentlist
isteğe bağlı. 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.

Not

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.

Not

Ö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 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 Uygulaması projesi açın, ana forma Form1adlı ve adlı Button1TextBox1 bir düğme ve adlı bir metin kutusu ekleyin. Ardından forma sağ tıklayın ve Kodu Görüntüle'ye tıklayarak Kod Düzenleyicisi'ni açın.

Sınıfının bildirimler bölümüne Form1 bir WithEvents değişken ekleyin.

Private WithEvents mText As TimerState

Örnek 2

koduna aşağıdaki kodu Form1ekleyin. , veya Button_Clickgibi Form_Loadvar 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ı formla tam olarak aynı şekilde işlemez. Formun olayları doğrudan işlemesine izin vermek 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.