다음을 통해 공유


Visual Basic에서 이벤트를 구독하고 처리하는 방법

이벤트는 일부 프로그램 구성 요소에서 인식하고 응답할 코드를 작성할 수 있는 동작 또는 발생(예: 마우스 클릭 또는 크레딧 한도 초과)입니다. 이벤트 처리기는 이벤트에 응답하기 위해 작성하는 코드입니다.

Visual Basic에는 이벤트를 사용하는 두 가지 측면이 있습니다.

  • 이벤트 게시 - 클래스는 RaiseEvent 문을 사용하여 흥미로운 일이 발생하면 이벤트를 선언하고 발생시킵니다. 이는 이벤트 처리기를 실제로 호출하는 것입니다.
  • 이벤트 구독 - 특정 이벤트에 대한 처리기로 프로시저를 식별하여 이벤트를 구독합니다. 절과 Handles 변수를 사용하거나 WithEvents 사용하여 이 작업을 수행할 수 있습니다.

Visual Basic의 이벤트 처리기는 프로시저입니다 Sub . 코드는 다른 Sub 절차와 같이 직접 호출하지 않습니다. 대신 이벤트 게시자는 프로시저가 이벤트를 구독하기 때문에 이벤트가 발생할 때 프로시저를 호출합니다.

절을 Handles 사용하는 것이 Visual Basic에서 이벤트를 구독하는 기본 방법입니다. IDE(통합 개발 환경)에서 프로그래밍할 때 디자이너가 이벤트 처리기를 작성하는 방법입니다. 이 AddHandler 문은 런타임에 이벤트를 동적으로 구독하는 데 적합합니다.

이벤트가 발생하면 Visual Basic에서 이벤트 처리기 프로시저를 자동으로 호출합니다. 이벤트에 액세스할 수 있는 모든 코드는 RaiseEvent 문을 실행하여 이벤트를 발생시킬 수 있습니다.

둘 이상의 이벤트 처리기를 동일한 이벤트와 연결할 수 있습니다. 경우에 따라 이벤트에서 처리기를 분리할 수 있습니다. 자세한 내용은 이벤트참조하세요.

Handles를 사용하여 이벤트를 구독하십시오 WithEvents

  1. 이벤트가 Event Statement로 선언되었는지 확인합니다.

  2. 키워드를 사용하여 모듈 또는 클래스 수준에서 개체 변수를 선언합니다 WithEvents . 이 변수의 절은 As 이벤트를 발생시키는 클래스를 지정해야 합니다.

  3. 이벤트 처리 Sub 프로시저 선언에 변수와 이벤트 이름을 지정하는 Handles 절을 추가 WithEvents합니다.

  4. 이벤트가 발생하면 Visual Basic에서 프로시저를 자동으로 호출합니다 Sub . 코드는 RaiseEvent 문을 사용하여 이벤트를 발생시키고 구독된 모든 처리기를 호출할 수 있습니다.

    다음 예제에서는 이벤트를 발생시키는 클래스를 WithEvents 참조하는 이벤트 및 변수를 정의합니다. 이벤트 처리 Sub 프로시저는 절을 Handles 사용하여 처리하는 클래스와 이벤트를 지정합니다.

    ' 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를 사용하여 이벤트 구독

  1. 이벤트가 Event 문으로 선언되었는지 확인하십시오.

  2. AddHandler 문을 실행하여 이벤트 처리 프로시저를 Sub 이벤트와 동적으로 연결합니다.

  3. 이벤트가 발생하면 Visual Basic에서 프로시저를 자동으로 호출합니다 Sub . 코드는 RaiseEvent 문을 사용하여 이벤트를 발생시키고 구독된 모든 처리기를 호출할 수 있습니다.

    다음 예제에서는 생성자의 AddHandler 문을 사용하여 사용자 지정 타이머 이벤트에 대한 이벤트 처리기로 프로시저를 연결 OnTimerElapsed 합니다.

    ' 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 문을 실행하여 이벤트 처리기를 이벤트에서 분리할 수 있습니다.

참고하십시오