RaiseEvent Deyimi
Bir sınıf, form veya belge içinde modül düzeyinde bildirilen bir olayı tetikler.
Syntax
RaiseEvent eventname[( argumentlist )]
Bölümler
eventname
Gereklidir. Tetiklenen olayın adı.
argumentlist
İsteğe bağlı. Değişkenlerin, dizilerin veya ifadelerin virgülle ayrılmış listesi. Bağımsız argumentlist değişkenin parantez içine alınmış olması gerekir. Bağımsız değişken yoksa parantezlerin atlanmış olması gerekir.
Açıklamalar
Gerekli, eventname modülde bildirilen bir olayın adıdır. Bu, Visual Basic adlandırma kurallarına göre hesaplanır.
Olay, oluştuğu modülde bildiriliyorsa bir hata oluşur. Aşağıdaki kod parçası bir olay bildirimini ve olayın ortaya çıkar olduğu yordamı göstermektedir.
' 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 RaiseEvent açıkça bildirilen olayları yükseltmek için kullanılamaz. Örneğin, tüm formlar bir Click olayı kaynağından System.Windows.Forms.Form devralarak türetilmiş bir RaiseEvent formda kullanılarak yükselt kullanılamaz. Form modülünde Click bir olay bildiriyorsanız, formun kendi olayı Click gölgeler. Yine de yöntemini çağırarak Click formun olaylarını OnClick çağırabilirsiniz.
Varsayılan olarak, Visual Basic tanımlanan bir olay, bağlantı kurulma sırasına göre olay işleyicilerini yükselter. Olaylar parametrelere ByRef sahip olduğundan, geç bağlanan bir işlem, önceki bir olay işleyicisi tarafından değiştirilmiş parametreleri alır. Olay işleyicileri yürüttükten sonra, denetimi olayı yükselten alt yönlendirene döndürülür.
Not
Paylaşılmayan olaylar, bildirildikleri sınıfın oluşturucusu içinde yükseltilmeyen olaylardır. Bu tür olaylar çalışma zamanı hatalarına neden olmaz, ancak ilişkili olay işleyicileri tarafından yakalanamayabilirsiniz. Oluşturucudan Shared bir olay oluşturmanız gerekirse 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 RaiseEvent olayın erişimcilerini RaiseEvent çağırır. Özel olaylar hakkında daha fazla bilgi için bkz. Event Deyimi.
Örnek 1
Aşağıdaki örnek, 10 ile 0 arasında saniyeleri saymak için olayları kullanır. Kod, deyimi de dahil olmak üzere olayla ilgili yöntemlerin, özelliklerin ve deyimlerin birkaçı RaiseEvent gösterir.
Bir olayı yükselten sınıf olay kaynağıdır ve olayı işleme yöntemleri olay işleyicileridir. Bir olay kaynağı, oluşturulan olaylar için birden çok işleyiciye sahip olabilir. Sınıf olayı yükselttirse, bu olay nesnenin bu örneği için olayları işlemek için seçilmiş olan her sınıf üzerinde ortaya çıkar.
Örnek ayrıca düğme ( ) ve metin kutusu () ile bir form Form1 ( Button1 ) TextBox1 kullanır. Düğmeye tıklarken, ilk metin kutusunda 10 ile 0 saniye arasında bir geri sayım görüntülenir. Tam süre (10 saniye) doldu, ilk metin kutusunda "Bitti" görüntülenir.
için Form1 kod, formun ilk ve terminal durumları belirtir. Ayrıca olaylar ortaya çıkarken yürütülen kodu da içerir.
Bu örneği kullanmak için yeni bir uygulama Windows projesini açın, adlı bir düğme ve adlı ana Button1 TextBox1 forma adlı bir metin kutusu 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
Örnek 2
aşağıdaki kodu koduna Form1 ekleyin. , veya gibi mevcut olan tüm yinelenen Form_Load yordamları 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 olayları formla tam olarak aynı şekilde işlemez. Formun olayları doğrudan işlemesine izin vermek için çoklu iş parçacığı kullanımı kullanabilirsiniz. Daha fazla bilgi için bkz. Yönetilen İş Parçacığı.