Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir Visual Studio projesini sırayla yürütülen bir dizi yordam olarak görselleştirebilirsiniz ancak gerçekte çoğu program olay odaklıdır; bu da yürütme akışının olaylar olarak adlandırılan dış oluşumlar tarafından belirlendiği anlamına gelir.
Olay, bir uygulamaya önemli bir şeyin gerçekleştiğini 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'te olaylarla kullanılan terimler ve kavramlar açıklanmaktadır.
Olayları Bildirme
Aşağıdaki örnekte olduğu gibi sınıflar, yapılar, modüller ve arabirimler içindeki olayları anahtar sözcüğünü Event
kullanarak bildirirsiniz:
Event AnEvent(ByVal EventNumber As Integer)
Olayları Tetikleme
Olay, önemli bir şeyin gerçekleştiğini duyuran bir ileti gibidir. İletiyi yayınlama eylemine olayı yükseltme denir. Visual Basic'te, aşağıdaki örnekte olduğu gibi RaiseEvent
deyimini kullanarak olayları tetiklersiniz.
RaiseEvent AnEvent(EventNumber)
Olaylar, bildirildikleri sınıf, modül veya yapı kapsamında tetiklenmelidir. Ö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önderenlere örnek olarak verilebilir.
Olay İşleyicileri
Olay işleyicileri , karşılık gelen bir olay gerçekleştiğinde çağrılan yordamlardır. Uyumlu imzaya sahip geçerli herhangi bir alt yordamı olay işleyicisi olarak 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, Click
adlı bir düğmenin olayı button1
olarak adlandırılır.
Uyarı
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, bunu bir olayla Handles
veya AddHandler
deyimini kullanarak ilişkilendirmeniz gerekir.
WithEvents ve Handles Deyimi
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
İfade WithEvents
ve Handles
yan tümcesi, kullandıkları bildirim temelli söz dizimi sayesinde olay işleyicileri için genellikle en iyi seçenektir. Bu yapı, olay işlemenin kodlanmasını, okunmasını ve hata ayıklamasını 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,WithEvents
veyaHandles
kullanarak birStructure
öğesinden gelen olayları işleyemezsiniz. 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 olay türünü işlemesine veya aynı tür olayı işlemek için bir veya daha fazla olay işleyicisine izin verir.
Standart bir olayı bir olay işleyicisiyle ilişkilendirmenin yolu olan Handles
yan tümcesi, ancak derleme zamanında olayları 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 (ekleme işleyicisi) ve RemoveHandler (çıkarma işleyicisi)
AddHandler
deyimi, her ikisinin de bir olay işleyicisi belirtmenize izin verdiği için Handles
yan tümcesine benzer. Ancak AddHandler
, RemoveHandler
ile kullanıldığında, Handles
yan tümcesinden daha fazla esneklik sağlayarak, bir olayla ilişkili olay işleyicisini dinamik olarak eklemenize, kaldırmanıza ve değiştirmenize olanak sağlar. Paylaşılan olayları veya olayları bir yapıdan işlemek istiyorsanız, kullanmanız AddHandler
gerekir.
AddHandler
iki bağımsız değişken alır: Denetim gibi bir olay göndericisinden gelen bir olayın adı ve bir temsilci olarak değerlendirilen ifade.
AddHandler
kullanırken, AddressOf
ifadesi her zaman delegeye bir referans döndürdüğünden, delege 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 olay işleyicisi ile bağlantısını kesen, AddHandler
ile aynı söz dizimini kullanır. Örneğin:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Aşağıdaki örnekte, bir olay işleyicisi bir olayla ilişkilendirilir ve olay tetiklenir. 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 işlem 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 tetiklenen olayları işleyebilir.
Bir temel sınıftan olayları işlemek için
Olay işleyicisi yordamınızın bildirim satırına bir
Handles MyBase.
eventname deyimi ekleyerek türetilmiş sınıfta bir 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 |
---|---|
Kılavuz: Olayları Tanımlama ve Tetikleme | Bir sınıf için olayları bildirme ve oluşturma hakkında adım adım bir açıklama sağlar. |
Kılavuz: Olayları İşleme | Etkinlik işleyici yordamının nasıl yazıldığını gösterir. |
Nasıl yapılır: Engellemeyi Önlemek için Ö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: Belleği Korumak için Özel Olaylar Bildirme | Yalnızca olay işlendiğinde bellek kullanan özel bir olayın nasıl tanımlandığını gösterir. |
Visual Basic'teki Kalıtılmış Olay İşleyicilerinde Sorun Giderme | Devralınan bileşenlerdeki olay işleyicileriyle ilgili yaygın sorunları listeler. |
Etkinlikler | .NET Framework'teki olay modeline genel bir bakış sağlar. |
Windows Forms'da Olay Yöneticileri Oluşturma | Windows Forms nesneleriyle ilişkili olaylarla nasıl çalışıldığı açıklanır. |
Temsilcileri | Visual Basic'te temsilcilere genel bir bakış sağlar. |