본문으로 바로가기

VB에서 다수의 이벤트를 받기

category 개발언어/VisualBasic 2016. 6. 13. 10:55

 

VB에서 다수의 이벤트를 받기


WithEvents Handles

WithEvents 문과 Handles 절을 사용하면 이벤트 처리기를 선언하여 지정할 수 있습니다. WithEvents 키워드를 사용하여 선언된 개체가 발생시킨 이벤트는 다음과 같이 이 이벤트에 대한 Handles 문이 포함된 프로시저에서 처리될 수 있습니다.

 

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 문과 Handles 절의 선언 구문을 사용하면 이벤트 처리 시 쉽게 코딩, 읽기 및 디버깅할 수 있기 때문에 이벤트 처리기에 대해 WithEvents 문과 Handles 절을 사용하는 것이 가장 좋습니다. 그러나 WithEvents 변수를 사용할 때에는 다음과 같은 제한 사항이 있습니다.

·         WithEvents 변수를 개체 변수로 사용할 수 없습니다. , 이 변수를 Object로 선언할 수는 없으며 변수 선언 시 클래스 이름을 지정해야 합니다.

·         공유 이벤트는클래스 인스턴스에 연결되지 않으므로 WithEvents를 사용하여 공유 이벤트를 선언적으로 처리할 수 없습니다. 마찬가지로, WithEvents 또는 Handles을 사용하여 Structure에서 이벤트를 처리할 수 없습니다. 두 경우 모두 AddHandler 문을 사용하여 공유 이벤트를 처리할 수 있습니다.

·         WithEvents 변수의 배열을 만들 수 없습니다.

·         WithEvents 변수를 사용하면 하나의 이벤트 처리기가 한 종류 이상의 이벤트를 처리하거나 하나 이상의 이벤트 처리기가 같은 종류의 이벤트를 처리할 수 있습니다.

·         --------

 


proceduredeclaration

이벤트를 처리할 프로시저에 대한 Sub 프로시저 선언입니다.

eventlist

처리할 proceduredeclaration에 대한 이벤트 목록입니다. 이 이벤트는 현재 클래스에 대한 기본 클래스를 발생시키거나 WithEvents 키워드를 사용하여 선언한 개체를 발생시켜야 합니다.

설명


프로시저 선언의 끝 부분에서 Handles 키워드를 사용하면 WithEvents 키워드를 사용하여 선언한 개체 변수로 발생시킨 이벤트를 처리하도록 할 수 있습니다. Handles 키워드를 파생 클래스에 사용하여 기본 클래스의 이벤트를 처리할 수도 있습니다.

프로시저 시그니처는 eventlist의 각 이벤트 시그니처와 일치해야 합니다.

Handles 키워드와 AddHandler 문은 모두 특정 프로시저가 특정 이벤트를 처리하도록 지정하는 데 사용할 수 있지만 둘 사이에는 차이점이 있습니다. Handles 키워드는 특정 이벤트를 처리하도록 프로시저를 정의할 때 사용합니다. AddHandler 문은 런타임에 프로시저를 이벤트에 연결합니다. 자세한 내용은 AddHandler 을 참조하십시오.

사용자 지정 이벤트의 경우 응용 프로그램은 프로시저를 이벤트 처리기로 추가할 때 이벤트의 AddHandler 접근자를 호출합니다. 사용자 지정 이벤트에 대한 자세한 내용은 Event 을 참조하십시오.

예제

 

Public Class ContainerClass

    ' Module or class level declaration.

 WithEvents Obj As New Class1

    Public Class Class1

        ' Declare an event.

        Public Event Ev_Event()

        Sub CauseSomeEvent()

            ' Raise an event.

            RaiseEvent Ev_Event()

        End Sub

    End Class

    Sub EventHandler() Handles Obj.Ev_Event

        ' Handle the event.

        MsgBox("EventHandler caught event.")

    End Sub

    ' Call the TestEvents procedure from an instance of the ContainerClass 

    ' class to test the Ev_Event event and the event handler.

    Public Sub TestEvents()

        Obj.CauseSomeEvent()

    End Sub

End Class 

다음 예제는 파생 클래스가 Handles 문을 사용하여 기본 클래스의 이벤트를 처리하는 방법을 보여 줍니다.

VB

 Public Class BaseClass

    ' Declare an event.

    Event Ev1()

End Class

Class DerivedClass

    Inherits BaseClass

    Sub TestEvents() Handles MyBase.Ev1

        ' Add code to handle this event.

    End Sub

End Class




AddHandler


AddHandler RemoveHandler 문을 사용하면 프로그램을 실행하는 동안 언제든지 이벤트 처리를 시작하고 중지할 수 있습니다.

eventhandler 프로시저의 시그니처는 event 이벤트의 시그니처와 일치해야 합니다.

Handles 키워드 및 AddHandler 문을 사용하여 특정 프로시저가 특정 이벤트를 처리하도록 지정할 수 있지만 둘 사이에는 차이점이 있습니다. AddHandler 문은 런타임에 프로시저를 이벤트에 연결합니다. Handles 키워드는 특정 이벤트를 처리하는 프로시저를 정의할 때 사용됩니다. 자세한 내용은 Handles를 참조하십시오.

사용자 지정 이벤트의 경우 AddHandler 문은 이벤트의 AddHandler 접근자를 호출합니다. 사용자 지정 이벤트에 대한 자세한 내용은 Event 을 참조하십시오.


 Sub TestEvents()

   Dim Obj As New Class1

    ' Associate an event handler with an event.

    AddHandler Obj.Ev_Event, AddressOf EventHandler

    ' Call the method to raise the event.

    Obj.CauseSomeEvent()

   ' Stop handling events.

    RemoveHandler Obj.Ev_Event, AddressOf EventHandler

    ' This event will not be handled.

    Obj.CauseSomeEvent()

End Sub

Sub EventHandler()

    ' Handle the event.

    MsgBox("EventHandler caught event.")

End Sub

Public Class Class1

    ' Declare an event.

    Public Event Ev_Event()

    Sub CauseSomeEvent()

        ' Raise an event.

        RaiseEvent Ev_Event()

    End Sub

End Class