이벤트 개요(Windows Forms)Events Overview (Windows Forms)

이벤트는 코드에서 응답, 즉 "처리"할 수 있는 작업입니다.An event is an action which you can respond to, or "handle," in code. 마우스를 클릭하거나 키를 누르는 등의 사용자 작업, 프로그램 코드 또는 시스템에 의해 이벤트가 생성될 수 있습니다.Events can be generated by a user action, such as clicking the mouse or pressing a key; by program code; or by the system.

이벤트 구동 애플리케이션은 이벤트에 대한 응답으로 코드를 실행합니다.Event-driven applications execute code in response to an event. 각 폼과 컨트롤은 미리 정의된 이벤트 집합을 표시하며 이러한 이벤트에 대해 프로그래밍을 수행할 수 있습니다.Each form and control exposes a predefined set of events that you can program against. 이러한 이벤트 중 하나가 발생할 때 연결된 이벤트 처리기에 코드가 있으면 해당 코드가 호출됩니다.If one of these events occurs and there is code in the associated event handler, that code is invoked.

개체에 의해 발생하는 이벤트 형식은 다양하지만 대부분의 형식은 대다수 컨트롤에 공통적으로 적용됩니다.The types of events raised by an object vary, but many types are common to most controls. 예를 들어 대부분의 개체는 Click 이벤트를 처리합니다.For example, most objects will handle a Click event. 사용자가 폼을 클릭하면 폼의 Click 이벤트 처리기에 포함된 코드가 실행됩니다.If a user clicks a form, code in the form's Click event handler is executed.

참고

대부분의 이벤트는 다른 이벤트와 함께 발생합니다.Many events occur in conjunction with other events. 예를 들어 DoubleClick 이벤트가 발생하는 과정에서는 MouseDown, MouseUpClick 이벤트도 발생합니다.For example, in the course of the DoubleClick event occurring, the MouseDown, MouseUp, and Click events occur.

이벤트를 발생 시키고 사용 하는 방법에 대 한 자세한 내용은 이벤트를 참조 하세요.For information about how to raise and consume an event, see Events.

대리자 및 해당 역할Delegates and Their Role

대리자는 이벤트 처리 메커니즘을 빌드하기 위해 .NET Framework 내에서 일반적으로 사용 되는 클래스입니다.Delegates are classes commonly used within the .NET Framework to build event-handling mechanisms. 대리자는 Visual C++ 및 기타 개체 지향 언어에서 일반적으로 사용 되는 함수 포인터와 거의 같습니다.Delegates roughly equate to function pointers, commonly used in Visual C++ and other object-oriented languages. 그러나 함수 포인터와는 달리 대리자는 개체 지향적이고 형식이 안전하며 보안이 유지됩니다.Unlike function pointers however, delegates are object-oriented, type-safe, and secure. 또한 함수 포인터는 특정 함수에 대한 참조만을 포함하지만 대리자는 개체 참조와 해당 개체 내에 있는 하나 이상의 메서드에 대한 참조로 구성됩니다.In addition, where a function pointer contains only a reference to a particular function, a delegate consists of a reference to an object, and references to one or more methods within the object.

이 이벤트 모델은 대리자 를 사용 하 여 이벤트를 처리 하는 데 사용 되는 메서드에 이벤트를 바인딩합니다.This event model uses delegates to bind events to the methods that are used to handle them. 대리자는 처리기 메서드를 지정하여 다른 클래스가 이벤트 알림을 등록할 수 있도록 설정합니다.The delegate enables other classes to register for event notification by specifying a handler method. 이벤트가 발생하면 대리자가 bound 메서드를 호출합니다.When the event occurs, the delegate calls the bound method. 대리자를 정의 하는 방법에 대 한 자세한 내용은 이벤트를 참조 하세요.For more information about how to define delegates, see Events.

대리자는 단일 메서드에 바인딩될 수도 있고 여러 메서드에 바인딩(멀티캐스트)될 수도 있습니다.Delegates can be bound to a single method or to multiple methods, referred to as multicasting. 이벤트에 대 한 대리자를 만들 때 (또는 Windows)는 일반적으로 멀티 캐스트 이벤트를 만듭니다.When creating a delegate for an event, you (or the Windows) typically create a multicast event. 이때 논리적으로 이벤트당 여러 번 반복되지 않는 특정 절차(예: 대화 상자 표시)를 수행하는 이벤트가 드물지만 예외적으로 발생할 수 있습니다.A rare exception might be an event that results in a specific procedure (such as displaying a dialog box) that would not logically repeat multiple times per event. 멀티 캐스트 대리자를 만드는 방법에 대 한 자세한 내용은 대리자를 결합 하는 방법 (멀티 캐스트 대리자)을 참조 하세요.For information about how to create a multicast delegate, see How to combine delegates (Multicast Delegates).

멀티캐스트 대리자는 바인딩 대상 메서드의 호출 목록을 유지 관리하며,A multicast delegate maintains an invocation list of the methods it is bound to. 호출 목록에 메서드를 추가하기 위한 Combine 메서드와 해당 메서드를 제거하기 위한 Remove 메서드를 지원합니다.The multicast delegate supports a Combine method to add a method to the invocation list and a Remove method to remove it.

애플리케이션이 이벤트를 기록하면 컨트롤은 해당 이벤트의 대리자를 호출하여 이벤트를 발생시킵니다.When an event is recorded by the application, the control raises the event by invoking the delegate for that event. 그러면 대리자는 bound 메서드를 호출합니다.The delegate in turn calls the bound method. 가장 일반적인 경우(멀티캐스트 대리자)에서 대리자는 호출 목록의 각 bound 메서드를 차례로 호출하므로 일대다 알림이 제공됩니다.In the most common case (a multicast delegate) the delegate calls each bound method in the invocation list in turn, which provides a one-to-many notification. 이러한 전략이 사용되므로 컨트롤이 이벤트 알림을 위해 대상 개체 목록을 유지하지 않아도 됩니다. 대리자가 모든 등록과 알림을 처리하기 때문입니다.This strategy means that the control does not need to maintain a list of target objects for event notification—the delegate handles all registration and notification.

또한 대리자는 여러 이벤트를 같은 메서드에 바인딩할 수 있도록 함으로써 다대일 알림도 허용합니다.Delegates also enable multiple events to be bound to the same method, allowing a many-to-one notification. 예를 들어 단추 클릭 이벤트와 메뉴 명령 클릭 이벤트 모두가 같은 대리자를 호출할 수 있으며, 이 대리자는 단일 메서드를 호출하여 두 개별 이벤트를 같은 방식으로 처리합니다.For example, a button-click event and a menu-command–click event can both invoke the same delegate, which then calls a single method to handle these separate events the same way.

대리자에는 동적 바인딩 메커니즘이 사용되므로 대리자는 런타임에 서명이 이벤트 처리기의 서명과 일치하는 모든 메서드에 바인딩될 수 있습니다.The binding mechanism used with delegates is dynamic: a delegate can be bound at run time to any method whose signature matches that of the event handler. 이 기능을 사용하면 조건에 따라 bound 메서드를 설정하거나 변경하고 이벤트 처리기를 컨트롤에 동적으로 연결할 수 있습니다.With this feature, you can set up or change the bound method depending on a condition and to dynamically attach an event handler to a control.

참고 항목See also