다음을 통해 공유


방법: 이벤트 처리기 작성

업데이트: 2007년 11월

이벤트 처리기를 만드는 방법은 이벤트 처리기와 이벤트를 연결하는 방법에 따라 다릅니다. 이벤트 처리기를 만드는 일반적인 방법은 Handles 키워드를 WithEvents 키워드와 함께 사용하는 것입니다. Visual Basic에서는 AddHandler 문을 사용하여 이벤트를 처리하는 또 다른 방법을 제공합니다. AddHandler 및 RemoveHandler를 사용하여 특정 이벤트에 대한 이벤트 처리를 동적으로 시작하고 중지할 수 있습니다. 두 방법 중 어느 하나를 사용할 수 있지만 하나의 이벤트에 대해 WithEvents와 AddHandler를 모두 사용하면 안 됩니다.

WithEvents를 사용한 이벤트 처리

WithEvents 키워드를 사용하여 이벤트 처리기에서 Handles 절과 함께 사용될 수 있는 클래스 또는 모듈 수준의 개체 변수를 만들 수 있습니다.

WithEvents 절과 Handles 절을 사용하여 이벤트를 처리하려면

  1. 이벤트를 포함하고 있는 단순한 클래스를 만듭니다.

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. 다음 예제와 같이 이벤트를 처리할 클래스 또는 모듈에서 WithEvents 키워드를 사용하여 개체 변수를 해당 이벤트의 소스에 선언합니다.

    Public WithEvents ClassInst As Class1
    
  3. 코드 편집기의 왼쪽에 있는 클래스이름 드롭다운 목록에서 WithEvents 변수를 선택합니다.

  4. 오른쪽의 메서드 이름 드롭다운 목록에서 처리할 이벤트를 선택합니다. 이렇게 하면 코드 편집기에서 Handles 절이 있는 빈 이벤트 처리기 프로시저를 만듭니다.

    참고:

    이 단계는 옵션입니다. 사용자가 직접 이벤트 처리기 프로시저를 만들려면 프로시저가 서브루틴이고, 처리할 이벤트와 일치하는 올바른 인수 목록이 있으며, Handles 절에서 처리할 이벤트를 지정해야 합니다.

  5. 제공된 인수를 사용하여 이벤트 처리기 프로시저에 이벤트 처리 코드를 추가합니다. 코드 예제는 다음과 같습니다.

    Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
          Handles ClassInst.AnEvent
        MsgBox("Received event number: " & CStr(EventNumber))
    End Sub
    

AddHandler를 사용한 이벤트 처리

AddHandler 문을 사용하여 이벤트와 이벤트 처리기 프로시저를 동적으로 연결할 수 있습니다.

AddHandler를 사용하여 이벤트를 처리하려면

  1. 다음 예제에서와 같이 이벤트를 처리할 서브루틴을 만듭니다.

    Public Sub EHandler(ByVal EventNumber As Integer)
        MsgBox("Received event number " & CStr(EventNumber))
    End Sub
    
  2. 처리하려는 이벤트의 소스에 해당하는 클래스의 개체 변수를 선언합니다. WithEvents 변수와 달리 이 개체 변수는 프로시저에서 지역 변수가 될 수 있습니다. 예를 들면 다음과 같습니다.

    Public Sub TestAddHandler()
        Dim CI As New Class1
    End Sub
    
  3. AddHandler 문을 사용하여 이벤트 전송자의 이름을 지정하고 AddressOf 문을 사용하여 이벤트 처리기의 이름을 지정합니다. 예를 들어, 다음 코드를 TestAddHandler 서브루틴의 끝 부분에 추가합니다.

    AddHandler CI.AnEvent, AddressOf EHandler
    

    처리할 이벤트에 대해 올바른 인수를 지원하는 모든 프로시저가 이벤트 처리기로 사용될 수 있습니다.

RemoveHandler를 사용한 이벤트 처리 중지

RemoveHandler 문을 사용하여 이벤트와 이벤트 처리기 프로시저의 연결을 동적으로 끊을 수 있습니다.

RemoveHandler를 사용하여 이벤트 처리를 중지하려면

  • RemoveHandler 문을 사용하여 이벤트 전송자의 이름을 지정하고 AddressOf 문을 사용하여 이벤트 처리기의 이름을 지정합니다. RemoveHandler 문의 구문은 이벤트 처리를 시작하는 데 사용되는 AddHandler 문과 거의 일치합니다. 예를 들면 다음과 같습니다.

    RemoveHandler CI.AnEvent, AddressOf EHandler
    

기본 클래스에서 상속된 이벤트 처리

파생 클래스는 기본 클래스의 특징을 상속받는 클래스입니다. 파생 클래스에서는 HandlesMyBase 문을 사용하여 기본 클래스에서 발생시킨 이벤트를 처리할 수 있습니다.

기본 클래스에서 발생된 이벤트를 처리하려면

  • 파생 클래스에서 이벤트 처리기 프로시저의 선언 줄에 Handles MyBase.eventname 문을 추가하여 이벤트 처리기를 선언합니다. 여기서 eventname은 처리할 기본 클래스의 이벤트 이름입니다. 예를 들면 다음과 같습니다.

    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
    

참고 항목

개념

이벤트 및 이벤트 처리기

대리자 및 AddressOf 연산자

AddHandler 및 RemoveHandler

참조

Handles

AddHandler 문