Olaylar (Visual Basic)

Bir projenizi Visual Studio dizide yürütülen yordamlar dizisi olarak görselleştiresiniz, 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, uygulamaya önemli bir şeyin olduğunu bildiren bir sinyaldir. Örneğin, bir kullanıcı formda bir denetime tıkladığında, form bir olay yükseltebilir ve Click olayı ele alan bir yordam çağırabilirsiniz. Olaylar ayrıca ayrı görevlerin iletişim kurmasına da olanak sağlar. Örneğin, uygulamanın ana uygulamadan ayrı bir sıralama görevi gerçekleştiriyor olduğunu kabul edin. Kullanıcı sıralamayı iptal ederse, uygulamanız sıralama işleminin durdurması talimatı olan bir iptal olayı gönderebilir.

Olay Terimleri ve Kavramları

Bu bölümde, Visual Basic'da olaylarla kullanılan terimler ve kavramlar açık Visual Basic.

Olayları Bildirme

Aşağıdaki örnekte olduğu gibi anahtar sözcüğünü kullanarak sınıflar, yapılar, modüller ve Event arabirimler içindeki olayları bildirebilirsiniz:

Event AnEvent(ByVal EventNumber As Integer)

Olayları Artırma

Olay, önemli bir şeyin olduğunu haber alan bir iletiye benzer. İletiyi yayınlama eylemine olayı gönderme denir. Bu Visual Basic, aşağıdaki örnekte olduğu gibi RaiseEvent deyimiyle olayları yükseltin:

RaiseEvent AnEvent(EventNumber)

Olayların bildirildikleri sınıf, modül veya yapı kapsamında yükseltiliyor olması gerekir. Örneğin, türetilmiş bir sınıf temel sınıftan devralınan olayları yükseltamaz.

Olay Gönderenleri

Olay oluşturma özelliğine sahip herhangi bir nesne, olay kaynağı olarak da bilinen bir olay göndericisidir. Formlar, denetimler ve kullanıcı tanımlı nesneler olay gönderenlere örnek olarak verilmiştir.

Olay İşleyicileri

Olay işleyicileri, karşılık gelen bir olay oluştuğunda çağrılır yordamlarıdır. Olay işleyicisi olarak eşleşen imzaya sahip geçerli bir alt yol kullanabilirsiniz. Bir işlevi olay işleyicisi olarak kullanılamaz, ancak olay kaynağına değer getirileyem çünkü.

Visual Basic gönderenin adını, alt çizgiyi ve olayın adını birleştiren olay işleyicileri için standart bir adlandırma kuralı kullanır. Örneğin, adlı Click bir düğmenin olayı button1 olarak Sub button1_Click adlandırılmıştır.

Not

Kendi olaylarınız için olay işleyicileri tanımlarken bu adlandırma kuralını kullanmanızı öneririz, ancak gerekli değildir; herhangi bir geçerli alt yol adı kullanabilirsiniz.

Olayları Olay İşleyicileri ile Birlikte Oluşturma

Bir olay işleyicisi kullanılabilir hale gelmeden önce veya deyimini kullanarak bir olayla Handles AddHandler ilişkilendirmelisiniz.

WithEvents ve Handles Yan Tümcesi

deyimi WithEvents ve Handles yan tümcesi, olay işleyicilerini belirtmenin bildirimsel bir yolunu sağlar. Anahtar sözcüğüyle bildirilen bir nesne tarafından 4. olay, aşağıdaki örnekte gösterildiği gibi bu olay için bir deyimi olan WithEvents herhangi bir yordam tarafından iş Handles olabilir:

' 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

Deyim ve yan tümcesi genellikle olay işleyicileri için en iyi seçenektir çünkü bunların kullanmaları bildirimli söz dizimi olay işlemeyi kod yazma, okuma ve hata WithEvents Handles ayıklamayı kolaylaştırır. Ancak, değişkenlerin kullanımıyla ilgili aşağıdaki sınırlamalara dikkat WithEvents edin:

  • Bir değişkeni nesne WithEvents değişkeni olarak kullanılamaz. Başka bir ifadeyle, bunu olarak bildiremezseniz, Object değişkeni bildirerek sınıf adını belirtmeniz gerekir.

  • Paylaşılan olaylar sınıf örneklerine bağlı değildir, paylaşılan olayları WithEvents bildirimli olarak işlemek için kullanılamaz. Benzer şekilde, bir 'den WithEvents gelen olayları işlemek için veya Handles Structure kullanılamaz. Her iki durumda da, bu olayları işlemek AddHandler için deyimini kullanabilirsiniz.

  • Değişken dizileri WithEvents oluşturamazsiniz.

WithEvents değişkenleri tek bir olay işleyicinin bir veya daha fazla olay veya aynı tür olayı işlemek için bir veya daha fazla olay işleyicisi işlemesine olanak sağlar.

yan tümcesi bir olayı bir olay işleyicisi ile sınırlandırmanın standart yolu olsa da, derleme zamanında olayları olay işleyicileriyle Handles sınırlandırma ile sınırlıdır.

Formlar veya denetimlerle ilişkili olaylar gibi bazı durumlarda, Visual Basic bir olay işleyicisini otomatik olarak saplar ve bir olayla ilişkilendirin. Örneğin, tasarım modunda bir formda bir komut düğmesine çift tıklarken Visual Basic kodda olduğu gibi komut düğmesi için boş bir olay işleyicisi ve WithEvents değişken oluşturur:

Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub

AddHandler ve RemoveHandler

deyimi, AddHandler içinde yan Handles tümcesine benzer ve her ikisi de bir olay işleyicisi belirtmenize olanak sağlar. Ancak, ile kullanılan , yan tümcesine göre daha fazla esneklik sağlar ve bir olayla ilişkili olay işleyicisini dinamik olarak AddHandler RemoveHandler Handles eklemenize, kaldırmanıza ve değiştirmenize olanak sağlar. Bir yapıdan paylaşılan olayları veya olayları işlemek için kullansanız AddHandler gerekir.

AddHandler iki bağımsız değişken alır: denetim gibi bir olay gönderenden olay adı ve temsilci olarak değerlendirilen bir ifade. deyimi her zaman temsilciye bir başvuru döndürene kadar kullanırken temsilci sınıfını AddHandler AddressOf açıkça belirtmeniz gerekmez. Aşağıdaki örnek, bir olay işleyicisini bir nesnesi tarafından yükseltilmiş bir olayla ilişkilendirin:

AddHandler Obj.XEvent, AddressOf Me.XEventHandler

RemoveHandlerbir olay işleyicisi ile bir olayın bağlantısını kesen , ile aynı sözdizimini AddHandler kullanır. Örnek:

RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler

Aşağıdaki örnekte, bir olay işleyicisi bir olayla ilişkilendirildi ve olay ortaya çıkar. 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şkilendirilr. Olay yeniden lendiğinde farklı bir ileti görüntülenir.

Son olarak, ikinci olay işleyicisi kaldırılır ve olay üçüncü kez uzer. Artık olayla ilişkili bir olay işleyicisi olmadığı için hiçbir eylem alınmaz.

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 kullanarak kendi temel sınıfı tarafından yükseltilen olayları Handles MyBase işebilir.

Temel sınıftan olayları işlemek için

  • Olay işleyici yordamının bildirim satırına bir eventname deyimi ekleyerek türetilmiş sınıfta bir olay işleyicisi bildirin; burada Handles MyBase. eventname, işlemektedir temel sınıfta olayın adıdır. Örnek:

    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ın nasıl bildir ve yükseltildiklerinin adım adım açıklamasını sağlar.
İzlenecek yol: Olayları İşleme Bir olay işleyicisi yordamının nasıl yaz olduğunu gösterir.
Nasıl yapılır: Engellemekten Kaçınacak Şekilde Özel Olayları Bildirme Olay işleyicileri zaman uyumsuz olarak çağrılmalarına olanak sağlayan özel bir olay tanımlamayı gösterir.
Nasıl yapılır: Bellekten Kazanacak Şekilde Özel Olayları Bildirme Yalnızca olay iş olduğunda belleği kullanan özel bir olay tanımlamayı gösteren.
Visual Basic'de Devralınmış Olay İşleyicileri İle İlgili Sorun Giderme Devralınan bileşenlerde 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 nesneleriyle ilişkili olaylarla nasıl Windows açıklar.
Temsilciler Verilerde temsilcilere genel bir bakış Visual Basic.