Aracılığıyla paylaş


Olaylar (Visual Basic)

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 olarak Objectbildiremezsiniz; 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 veya Handles kullanarak bir Structure öğesinden gelen olayları işleyemezsiniz. Her iki durumda da bu olayları işlemek için deyimini AddHandler 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 AddHandlergerekir.

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
    
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.