Olaylar (Visual Basic)
Bir Visual Studio projesini bir dizi halinde yürütülen bir dizi yordam olarak görselleştirebilirsiniz ancak gerçekte çoğu program olay odaklıdır; yani yürütme akışı, olaylar olarak adlandırılan dış oluşumlar tarafından belirlenir.
Olay, bir uygulamaya önemli bir şeyin oluştuğunu bildiren bir sinyaldir. Örneğin, bir kullanıcı formdaki bir denetime tıkladığında, form bir Click
olay oluşturabilir ve olayı işleyen bir yordamı çağırabilir. Olaylar ayrıca ayrı görevlerin iletişim kurmasına da olanak sağlar. Örneğin, uygulamanızın ana uygulamadan ayrı olarak bir sıralama görevi gerçekleştirdiğini söyleyebiliriz. Kullanıcı sıralamayı iptal ederse, uygulamanız sıralama işleminin durdurulmasını belirten bir iptal olayı gönderebilir.
Olay Terimleri ve Kavramları
Bu bölümde, Visual Basic olaylarıyla kullanılan terimler ve kavramlar açıklanmaktadır.
Olayları Bildirme
Sınıflar, yapılar, modüller ve arabirimler içindeki olayları aşağıdaki örnekte olduğu gibi anahtar sözcüğünü Event
kullanarak bildirirsiniz:
Event AnEvent(ByVal EventNumber As Integer)
Olayları Oluşturma
Olay, önemli bir şeyin gerçekleştiğini duyuran bir ileti gibidir. İletiyi yayınlama eylemine olayı yükseltme denir. Visual Basic'da, aşağıdaki örnekte olduğu gibi deyimiyle RaiseEvent
olayları tetiklersiniz:
RaiseEvent AnEvent(EventNumber)
Olaylar, bildirildikleri sınıf, modül veya yapı kapsamında oluşturulmalıdır. Örneğin, türetilmiş bir sınıf temel sınıftan devralınan olayları tetikleyemez.
Olay Gönderenleri
Olay oluşturabilen herhangi bir nesne, olay kaynağı olarak da bilinen bir olay gönderenidir. Formlar, denetimler ve kullanıcı tanımlı nesneler, olay gönderenlerine örnek olarak verilebilir.
Olay İşleyicileri
Olay işleyicileri , karşılık gelen bir olay gerçekleştiğinde çağrılan yordamlardır. Olay işleyicisi olarak eşleşen bir imzayla geçerli herhangi bir alt yordam kullanabilirsiniz. Ancak olay kaynağına bir değer döndüremediğinden bir işlevi olay işleyicisi olarak kullanamazsınız.
Visual Basic, olay işleyicileri için olay gönderenin adını, alt çizgisini ve olayın adını birleştiren standart bir adlandırma kuralı kullanır. Örneğin, adlı bir düğmenin Click
olayı olarak adlandırılırSub button1_Click
.button1
Not
Kendi olaylarınız için olay işleyicileri tanımlarken bu adlandırma kuralını kullanmanızı öneririz, ancak gerekli değildir; geçerli herhangi bir alt yordam adı kullanabilirsiniz.
Olayları Olay İşleyicileriyle İlişkileştirme
Bir olay işleyicisi kullanılabilir duruma gelmeden önce veya AddHandler
deyimini kullanarak Handles
bunu bir olayla ilişkilendirmeniz gerekir.
WithEvents ve Handles Yan Tümcesi
WithEvents
deyimi ve Handles
yan tümcesi, olay işleyicilerini belirtmenin bildirim temelli bir yolunu sağlar. anahtar sözcüğüyle WithEvents
bildirilen bir nesne tarafından tetiklenen bir olay, aşağıdaki örnekte gösterildiği gibi, bu olay için bir deyimi olan herhangi bir Handles
yordam tarafından işlenebilir:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
WithEvents
Deyim ve Handles
yan tümcesi genellikle olay işleyicileri için en iyi seçenektir çünkü kullandıkları bildirim temelli söz dizimi, olay işlemeyi kodlamayı, okumayı ve hata ayıklamayı kolaylaştırır. Ancak, değişkenlerin kullanımıyla WithEvents
ilgili aşağıdaki sınırlamalara dikkat edin:
Bir
WithEvents
değişkeni nesne değişkeni olarak kullanamazsınız. Başka bir deyişle, bunu olarakObject
bildiremezsiniz; değişkenini bildirirken sınıf adını belirtmeniz gerekir.Paylaşılan olaylar sınıf örneklerine bağlı olmadığından, paylaşılan olayları bildirimli olarak işlemek için kullanamazsınız
WithEvents
. Benzer şekilde, bir öğesindenStructure
gelen olayları işlemek için veyaHandles
kullanamazsınızWithEvents
. Her iki durumda da bu olayları işlemek için deyiminiAddHandler
kullanabilirsiniz.Değişken dizileri
WithEvents
oluşturamazsınız.
WithEvents
değişkenler, tek bir olay işleyicisinin bir veya daha fazla tür olayı işlemesine veya aynı tür olayı işlemek için bir veya daha fazla olay işleyicisine izin verir.
yan tümcesi bir olayı bir olay işleyicisiyle ilişkilendirmenin standart yolu olsa Handles
da, olayları derleme zamanında olay işleyicileriyle ilişkilendirmekle sınırlıdır.
Formlar veya denetimlerle ilişkili olaylar gibi bazı durumlarda, Visual Basic boş bir olay işleyicisini otomatik olarak saplar ve bir olayla ilişkilendirir. Örneğin, tasarım modunda bir formdaki bir komut düğmesine çift tıkladığınızda, Visual Basic aşağıdaki kodda olduğu gibi komut düğmesi için boş bir olay işleyicisi ve değişken WithEvents
oluşturur:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler ve RemoveHandler
deyimi AddHandler
, bir olay işleyicisi Handles
belirtmenize olanak sağlayan yan tümcesine benzer. Ancak ile AddHandler
RemoveHandler
kullanılan , yan tümcesinden daha Handles
fazla esneklik sağlayarak bir olayla ilişkili olay işleyicisini dinamik olarak eklemenize, kaldırmanıza ve değiştirmenize olanak sağlar. Bir yapıdan paylaşılan olayları veya olayları işlemek istiyorsanız kullanmanız AddHandler
gerekir.
AddHandler
iki bağımsız değişken alır: denetim gibi bir olayı gönderenden gelen bir olayın adı ve temsilci olarak değerlendirilen bir ifade. deyimi her zaman temsilciye bir başvuru döndürdüğündenAddressOf
, kullanırken AddHandler
temsilci sınıfını açıkça belirtmeniz gerekmez. Aşağıdaki örnek, bir olay işleyicisini bir nesne tarafından oluşturulan bir olayla ilişkilendirir:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler
, bir olayın bir olay işleyicisi ile bağlantısını keser ve ile aynı söz dizimini AddHandler
kullanır. Örneğin:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Aşağıdaki örnekte, bir olay işleyicisi bir olayla ilişkilendirilir ve olay oluşturulur. Olay işleyicisi olayı yakalar ve bir ileti görüntüler.
Ardından ilk olay işleyicisi kaldırılır ve olayla farklı bir olay işleyicisi ilişkilendirilir. Olay yeniden tetiklendiğinde farklı bir ileti görüntülenir.
Son olarak, ikinci olay işleyicisi kaldırılır ve olay üçüncü kez oluşturulur. Artık olayla ilişkilendirilmiş bir olay işleyicisi olmadığından hiçbir eylem yapılmaz.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Temel Sınıftan Devralınan Olayları İşleme
Türetilmiş sınıflar (bir temel sınıftan özellikleri devralan sınıflar), deyimini Handles MyBase
kullanarak kendi temel sınıfı tarafından oluşturulan olayları işleyebilir.
Bir temel sınıftan olayları işlemek için
Olay işleyici yordamınızın bildirim satırına bir eventname deyimi ekleyerek türetilmiş sınıfta bir
Handles MyBase.
olay işleyicisi bildirin; burada eventname, işlemekte olduğunuz temel sınıftaki olayın adıdır. Örneğin:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
İlgili Bölümler
Başlık | Açıklama |
---|---|
İzlenecek yol: Olay Bildirme ve Oluşturma | Bir sınıf için olayları bildirme ve oluşturma hakkında adım adım bir açıklama sağlar. |
İzlenecek yol: Olayları İşleme | Bir olay işleyici yordamının nasıl yazulduğunu gösterir. |
Nasıl yapılır: Engellemekten Kaçınacak Şekilde Özel Olayları Bildirme | Olay işleyicilerinin zaman uyumsuz olarak çağrılmasını sağlayan özel bir olayın nasıl tanımlandığını gösterir. |
Nasıl yapılır: Bellekten Kazanacak Şekilde Özel Olayları Bildirme | Yalnızca olay işlendiğinde bellek kullanan özel bir olayın nasıl tanımlandığını gösterir. |
Visual Basic'de Devralınmış Olay İşleyicileri İle İlgili Sorun Giderme | Devralınan bileşenlerdeki olay işleyicileriyle ilgili yaygın sorunları listeler. |
Ekinlikler | .NET Framework içindeki olay modeli için genel bir bakış sağlar. |
Windows Forms'ta Olay İşleyicileri Oluşturma | Windows Forms nesnelerle ilişkili olaylarla nasıl çalışıldığı açıklanır. |
Temsilciler | Visual Basic'daki temsilcilere genel bakış sağlar. |