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 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, bir öğesinden Structuregelen olayları işlemek için veya Handles kullanamazsınızWithEvents. 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 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 AddHandlerRemoveHandlerkullanı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 AddHandlergerekir.

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 AddHandlertemsilci 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 AddHandlerkullanı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
    
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.