Aracılığıyla paylaş


Visual Basic'te olaylara abone olma ve bunları işleme

Olay, bir program bileşeni tarafından tanınan ve yanıt vermek üzere kod yazabileceğiniz bir eylem veya oluşumdur (fare tıklaması veya kredi sınırı aşılmış gibi). Olay işleyicisi, bir olaya yanıt vermek için yazdığınız koddur.

Visual Basic'te olaylarla çalışmanın iki tarafı vardır:

  • Olay yayımlama — Sınıflar Olayları bildirir ve RaiseEvent Deyimini kullanarak ilginç bir şey olduğunda bunları tetikler. Olay işleyicilerini tetikleyen budur.
  • Olay aboneliği — Belirli olaylar için prosedürleri işleyici olarak tanımlayarak olaylara abone olabilirsiniz. Bunu bir Handles yan tümce ve WithEvents değişkenle veya AddHandler Deyimiyle yapabilirsiniz.

Visual Basic'te olay işleyicisi bir Sub yordamdır. Kodunuz, diğer Sub yordamlar gibi onu doğrudan çağırmaz. Bunun yerine olay yayımcıları, yordam olaya abone olduğundan olay tetiklendiğinde yordamı çağırır.

Visual Basic'te olaylara abone olmak için varsayılan yöntem Handles yan tümcesi kullanmaktır. Tümleşik geliştirme ortamında (IDE) programladığınızda olay işleyicileri tasarımcılar tarafından bu şekilde yazılır. deyimi AddHandler , çalışma zamanında olaylara dinamik olarak abone olmak için uygundur.

Olay gerçekleştiğinde, Visual Basic olay işleyici yordamını otomatik olarak çağırır. Olaya erişimi olan tüm kodlar RaiseEvent Deyimi yürüterek bunun oluşmasına neden olabilir.

Aynı olayla birden fazla olay işleyicisi ilişkilendirebilirsiniz. Bazı durumlarda bir işleyiciyi bir olaydan ayırabilirsiniz. Daha fazla bilgi için bkz. Olaylar.

Bir olaya Handles ve WithEvents kullanarak abone olun

  1. Olayın bir Event Deyimi ile bildirildiğinden emin olun.

  2. Anahtar sözcüğünü kullanarak modül veya sınıf düzeyinde bir nesne değişkeni bildirin WithEvents . Bu değişkenin As yan tümcesi, olayı tetikleyen sınıfı belirtmelidir.

  3. Olay işleme Sub yordamının bildiriminde değişkeni ve olay adını belirten Handles bir WithEvents yan tümcesi ekleyin.

  4. Olay gerçekleştiğinde, Visual Basic otomatik olarak Sub yordamını çağırır. Kodunuz RaiseEvent deyimini kullanarak olayı tetikleyebilir ve abone olunan tüm işleyicileri çalıştırabilir.

    Aşağıdaki örnek bir olayı ve olayı oluşturan sınıfa başvuran bir WithEvents değişkeni tanımlar. Olay işleme Sub yordamı, işlediği sınıfı ve olayı belirtmek için bir Handles yan tümcesi kullanır.

    ' Example showing event handling with Handles and WithEvents
    Public Class EventPublisher
        Public Event SomethingHappened()
        
        Public Sub CauseEvent()
            ' Raise the event when something interesting happens
            RaiseEvent SomethingHappened()
        End Sub
    End Class
    
    Public Class EventSubscriber
        ' Declare a WithEvents variable
        Dim WithEvents eventObj As New EventPublisher
        
        ' Handle the event using Handles clause
        Public Sub ProcessHappen() Handles eventObj.SomethingHappened
            ' Insert code to handle somethingHappened event.
            Console.WriteLine("Event handled using Handles clause!")
        End Sub
        
        Public Sub TriggerEvent()
            eventObj.CauseEvent()
        End Sub
    End Class
    

AddHandler kullanarak bir olaya abone olma

  1. Olayın bir Event deyimiyle bildirildiğinden emin olun.

  2. Olay işleme yordamını olaya dinamik olarak bağlamak için Sub yürütür.

  3. Olay gerçekleştiğinde, Visual Basic otomatik olarak Sub yordamını çağırır. Kodunuz bir ifade kullanarak RaiseEvent olayını tetikleyebilir ve tüm abone işleyicileri çağırabilir.

    Aşağıdaki örnek, yordamı özel zamanlayıcı olayı için bir olay işleyicisi olarak ilişkilendirmek için oluşturucudaki OnTimerElapsed kullanır.

    ' Example showing event handling with AddHandler
    Public Class Timer
        Public Event TimerElapsed(ByVal message As String)
        
        Public Sub Start()
            ' Simulate timer elapsed
            RaiseEvent TimerElapsed("Timer has elapsed!")
        End Sub
    End Class
    
    Public Class Application
        Private appTimer As New Timer()
        
        Sub New()
            ' Use AddHandler to dynamically associate event handler
            AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed
        End Sub
    
        Private Sub OnTimerElapsed(ByVal message As String)
            ' Insert code to handle timer elapsed event
            Console.WriteLine($"Handling timer event: {message}")
        End Sub
        
        Public Sub StartTimer()
            appTimer.Start()
        End Sub
    End Class
    

    RemoveHandler deyimini yürüterek bir olay işleyicisini bir olaydan ayırabilirsiniz.

Ayrıca bakınız