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 RaiseEvent
RaiseEvent
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 (Button1
TextBox1
) 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 Form1
adlı ve adlı Button1
TextBox1
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 Form1
ekleyin. , veya Button_Click
gibi 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ı 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.