VB.NET 2008/VB - 이벤트

이벤트 처리 - 이벤트

본클라쓰 2011. 4. 17. 09:43

 

Visual Studio 프로젝트를 순서대로 실행되는 일련의 프로시저로 시각화할 수 있지만 실제로 대부분의 프로그램을 이벤트 구동 방식이므로 이벤트라는 외부 발생 요인에 따라 실행 흐름이 결정된다.

 

이벤트는 중요한 사항이 발생했음을 응용 프로그램에 알리는 신호이다. 예를 들어, 사용자가 폼에 있는 컨트롤을 클릭하면 해당 폼은 Click 이벤트를 발생시키고 이 이벤트를 처리하는 프로시저를 호출한다. 또한 이벤트는 별개의 작업들이 서로 통신할 수 있도록 해준다. 예를 들어, 응용 프로그램이 주 응용 프로그램과는 별도로 정렬 작업을 수행하는 경우 사용자가 정렬을 취소하면 응용 프로그램에서는 정렬 프로세스를 중지하도록 지시하는 cancel 이벤트를 보낸다.

 

이벤트는 함수에 대한 참조를 사용하여 함수를 간접적으로 호출할 수 있도록 하는 개체 지향 함수 포인터의 한 형식인 대리자를 사용하여 구현된다.

 

 

이벤트 선언은 Event 키워드를 사용하여 클래스, 구조체, 모듈 및 인터페이스 내에 선언된다.

 

Event AnEvent(ByVal EventNumber As Integer)

 

 

이벤트는 중요한 사항이 발생했음을 알리는 메시지와 같으며, 이러한 메시지를 브로드캐스팅하는 동작을 일컬어 이벤트를 발생시킨다고 한다. Visual Basic에서는 RaiseEvent 문을 사용하여 이벤트를 발생시킨다.

 

RaiseEvent AnEvent(EventNumber)

 

이벤트는 선언된 클래스, 모듈 도는 구조체의 범위 내에서 발생되어야 한다. 예를 들어, 파생 클래스는 기본 클래스에서 상속된 이벤트를 발생시킬 수 없다.

 

 

이벤트를 발생시킬 수 있는 개체를 이벤트 전송자 또는 이벤트 소스라고 한다. 이벤트 전송자의 예로는 폼, 컨트롤 및 사용자 정의 개체가 있다.

 

 

이벤트 처리기는 해당되는 이벤트가 발생할 때 호출되는 프로시저이다. 서명이 일치하는 모든 유효한 서브루틴의 경우 이벤트 처리기로 사용할 수 있지만 함수의 경우 이벤트 소스에 값을 반환하지 않기 때문에 이벤트 처리기를 사용될 수 없다.

 

 

이벤트 처리기를 사용하려면 먼저 Handles 문이나 AddHandler 문을 사용하여 해당 이벤트 처리기와 이벤트를 연결해야 한다.

 

WithEvents 문과 Handles 절을 사용하여 선언함으로써 이벤트 처리기를 지정할 수 있다. WithEvents를 사용하여 선언된 개체가 발생시킨 이벤트는 이 이벤트 이름을 지정한 Handles 절이 포함된 서브루틴에서 처리된다. Handles 절은 이벤트와 이벤트 처리기를 연결하는 표준 방법이지만 컴파일 타임에 연결하는 것은 제한된다.

 

AddHandler 문과 RemoveHandler 문은 Handles 절보다 좀 더 융통성이 있다. 이 문을 사용하면 런타임에 이벤트와 하나 이상의 이벤트 처리기를 동적으로 연결하거나 연결을 끊을 수 잇으며 WithEvents를 사용하여 개체 변수를 선언하지 않아도 된다. 그러나 WithEvents를 사용하는 데는 몇 가지 제한이 있다.