이벤트 개요(Windows Forms)
업데이트: 2007년 11월
이벤트는 코드로 응답하거나 "처리"할 수 있는 동작입니다. 이벤트는 마우스 클릭이나 키 누름과 같은 사용자 동작, 프로그램 코드 또는 시스템에 의해 생성됩니다.
이벤트 구동 응용 프로그램은 이벤트에 대한 응답으로 코드를 실행합니다. 각 폼과 컨트롤은 프로그래밍 할 수 있는 미리 정의된 이벤트 집합을 제공합니다. 이러한 이벤트 중 하나가 발생하고 관련 이벤트 처리기에 코드가 있으면 해당 코드가 호출됩니다.
개체에 의해 발생되는 이벤트의 형식은 다양하지만 많은 형식의 이벤트는 대부분의 컨트롤에서 공통으로 사용합니다. 예를 들어 대부분의 개체는 Click 이벤트를 처리합니다. 사용자가 폼을 클릭하면 이 폼의 Click 이벤트 처리기에 있는 코드가 실행됩니다.
참고: |
---|
대부분의 이벤트는 다른 이벤트와 함께 발생합니다. 예를 들어 DoubleClick 이벤트가 발생하는 과정에서 MouseDown, MouseUp 및 Click 이벤트도 발생합니다. |
이벤트를 발생시키고 사용하는 방법에 대한 자세한 내용은 방법: 이벤트 발생 및 사용을 참조하십시오. 이벤트 처리기 및 메서드를 연결하는 방법에 대한 예제는 방법: 이벤트에 이벤트 처리기 메서드 연결을 참조하십시오.
대리자 및 대리자의 역할
대리자는 .NET Framework에서 이벤트 처리 메커니즘을 구축하는 데 일반적으로 사용되는 클래스입니다. 간단히 말하면 대리자는 Visual C++ 및 기타 개체 지향 언어에서 일반적으로 사용되는 함수 포인터와 같은 개념입니다. 그러나 함수 포인터와 달리 대리자는 개체 지향적이고 형식 안전성을 제공하며 안정적입니다. 또한 함수 포인터는 특정 함수에 대한 참조만 가지고 있지만 대리자는 개체에 대한 참조 및 개체 내의 하나 이상의 메서드에 대한 참조로 구성되어 있습니다.
이 이벤트 모델은 대리자를 사용하여 이벤트를 처리하는 데 사용되는 메서드에 이벤트를 바인딩합니다. 대리자는 처리기 메서드를 지정하여 다른 클래스가 이벤트 알림을 등록할 수 있도록 합니다. 이벤트가 발생하면 대리자는 바인딩된 메서드를 호출합니다. 대리자를 정의하는 방법에 대한 자세한 내용은 이벤트 및 대리자를 참조하십시오.
대리자는 하나의 메서드 또는 여러 메서드에 바인딩될 수 있습니다. 여러 메서드에 바인딩되는 것을 멀티캐스팅이라고 합니다. 이벤트에 대한 대리자를 만들 때 사용자나 Windows Forms 디자이너는 일반적으로 멀티캐스트 이벤트를 만듭니다. 대화 상자 표시와 같이 각 이벤트마다 논리적으로 여러 번 반복되지 않고 특정 프로시저로 나타나는 이벤트는 드문 예외입니다. 멀티캐스트 대리자를 만드는 방법에 대한 자세한 내용은 방법: 대리자 조합(멀티캐스트 대리자)(C# 프로그래밍 가이드)을 참조하십시오.
멀티캐스트 대리자는 바인딩된 메서드의 호출 목록을 유지 관리합니다. 멀티캐스트 대리자는 호출 목록에 메서드를 추가하는 Combine 메서드와 이를 제거하는 Remove 메서드를 지원합니다.
응용 프로그램이 이벤트를 기록하면 컨트롤은 해당 이벤트의 대리자를 호출하여 이벤트를 발생시킵니다. 대리자는 바인딩된 메서드를 차례로 호출합니다. 대리자가 호출 목록에 있는 각 바인딩된 메서드를 차례로 호출하여 일대다 알림을 제공하는 것이 가장 일반적인 경우(멀티캐스트 대리자)입니다. 이 방법을 사용하면 컨트롤이 이벤트 알림을 위해 대상 개체 목록을 유지할 필요가 없으며 대리자가 모든 등록과 알림을 처리합니다.
또한 대리자를 사용하면 여러 이벤트를 동일한 메서드에 바인딩할 수 있으므로 다대일 알림이 가능합니다. 예를 들어, 단추 클릭 이벤트와 메뉴 명령 클릭 이벤트가 동일한 대리자를 호출하는 경우 하나의 메서드를 호출해서 각 이벤트를 동일한 방법으로 처리할 수 있습니다.
대리자에 사용되는 바인딩 메커니즘은 동적입니다. 즉, 대리자는 런타임에 이벤트 처리기와 시그니처가 일치하는 모든 메서드에 바인딩될 수 있습니다. 이 기능을 사용하면 바인딩된 메서드를 조건에 따라 설정하거나 변경하고 이벤트 처리기를 동적으로 컨트롤에 추가할 수 있습니다.