다음을 통해 공유


이벤트 개요

이벤트는 코드를 통해 응답하거나 “처리”할 수 있는 작업입니다. 이벤트는 일반적으로 마우스를 클릭하거나 키를 누르는 등의 사용자 작업에 의해 생성되지만 프로그램 코드 또는 시스템에서 생성될 수도 있습니다.

이벤트 기반 애플리케이션은 이벤트에 대한 응답으로 코드를 실행합니다. 각 양식 및 컨트롤은 응답할 수 있는 미리 정의된 이벤트 집합을 노출합니다. 이러한 이벤트 중 하나가 발생하고 연결된 이벤트 처리기가 있는 경우 처리기가 호출되고 코드가 실행됩니다.

개체에 의해 발생하는 이벤트 형식은 다양하지만 대부분의 형식은 대다수 컨트롤에 공통적으로 적용됩니다. 예를 들어 대부분의 개체에는 Click 사용자가 클릭할 때 발생하는 이벤트가 있습니다.

비고

많은 이벤트가 다른 이벤트와 함께 발생합니다. 예를 들어 DoubleClick 이벤트가 발생하는 과정에서는 MouseDown, MouseUpClick 이벤트도 발생합니다.

이벤트를 발생시키고 사용하는 방법에 대한 일반적인 내용은 .NET에서 이벤트 처리 및 발생을 참조하세요.

대리자 및 해당 역할

대리자는 .NET에서 이벤트 처리 메커니즘을 빌드하는 데 흔히 사용되는 클래스입니다. 대리자는 Visual C++ 및 기타 개체 지향 언어에서 일반적으로 사용되는 함수 포인터와 거의 비슷합니다. 그러나 함수 포인터와는 달리 대리자는 개체 지향적이고 형식이 안전하며 보안이 유지됩니다. 또한 함수 포인터는 특정 함수에 대한 참조만을 포함하지만 대리자는 개체 참조와 해당 개체 내에 있는 하나 이상의 메서드에 대한 참조로 구성됩니다.

해당 이벤트 모델은 ‘대리자’를 사용하여 이벤트를 이벤트 처리에 사용되는 메서드에 바인딩합니다. 대리자는 처리기 메서드를 지정하여 다른 클래스가 이벤트 알림을 등록할 수 있도록 설정합니다. 이벤트가 발생하면 대리자가 bound 메서드를 호출합니다. 대리자를 정의하는 방법에 대한 자세한 내용은 이벤트 처리 및 발생을 참조하세요.

대리자는 단일 메서드에 바인딩될 수도 있고 여러 메서드에 바인딩(멀티캐스트)될 수도 있습니다. 이벤트 대리자를 만드는 경우 일반적으로 멀티캐스트 이벤트를 만듭니다. 논리적으로 이벤트당 여러 번 반복되지 않는 특정 프로시저(예: 대화 상자 표시)를 수행하는 이벤트가 드물지만 예외적으로 발생할 수 있습니다. 멀티캐스트 대리자를 만드는 방법에 대한 자세한 내용은 대리자를 결합하는 방법(멀티캐스트 대리자)을 참조하세요.

멀티캐스트 대리자는 바인딩 대상 메서드의 호출 목록을 유지 관리하며, 호출 목록에 메서드를 추가하기 위한 Combine 메서드와 해당 메서드를 제거하기 위한 Remove 메서드를 지원합니다.

애플리케이션이 이벤트를 기록하면 컨트롤은 해당 이벤트의 대리자를 호출하여 이벤트를 발생시킵니다. 그러면 대리자는 bound 메서드를 호출합니다. 가장 일반적인 경우(멀티캐스트 대리자)에서는 대리자가 호출 목록에 바인딩된 각 메서드를 차례로 호출하므로 일대다 알림이 제공됩니다. 이 전략이 사용되므로 컨트롤이 이벤트 알림을 위해 대상 개체 목록을 유지하지 않아도 됩니다. 대리자가 모든 등록과 알림을 처리하기 때문입니다.

또한 대리자는 여러 이벤트를 같은 메서드에 바인딩할 수 있도록 함으로써 다대일 알림도 허용합니다. 예를 들어 단추 클릭 이벤트와 메뉴 명령 클릭 이벤트 모두가 같은 대리자를 호출할 수 있으며, 이 대리자는 단일 메서드를 호출하여 두 개별 이벤트를 같은 방식으로 처리합니다.

대리자에는 동적 바인딩 메커니즘이 사용되므로 런타임에 이벤트 처리기의 시그니처와 일치하는 시그니처를 가진 모든 메서드에 대리자를 바인딩할 수 있습니다. 이 기능을 사용하면 조건에 따라 bound 메서드를 설정하거나 변경하고 이벤트 처리기를 컨트롤에 동적으로 연결할 수 있습니다.

Windows Forms의 이벤트

Windows Forms의 이벤트는 처리기 메서드에 대한 대리자를 사용하여 EventHandler<TEventArgs> 선언됩니다. 각 이벤트 처리기는 이벤트를 제대로 처리할 수 있는 두 개의 매개 변수를 제공합니다. 다음 예제에서는 Button 컨트롤의 Click 이벤트에 대한 이벤트 처리기를 보여 줍니다.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

첫 번째 매개 변수 sender는 이벤트를 발생시킨 개체에 대한 참조를 제공합니다. 두 번째 매개 변수는 e처리 중인 이벤트와 관련된 개체를 전달합니다. 개체의 속성 및 경우에 따라 메서드를 참조하여 마우스 이벤트의 마우스 위치 또는 끌어서 놓기 이벤트에서 전송되는 데이터와 같은 정보를 얻을 수 있습니다.

일반적으로 각 이벤트는 두 번째 매개 변수에 대해 다른 이벤트 개체 형식의 이벤트 처리기를 생성합니다. MouseDownMouseUp 이벤트의 이벤트 처리기와 같은 일부 이벤트 처리기는 두 번째 매개 변수에 대해 동일한 개체 형식을 사용합니다. 이 유형의 이벤트에 대해 동일한 이벤트 처리기를 사용하여 두 이벤트를 모두 처리할 수 있습니다.

동일한 이벤트 처리기를 사용하여 다양한 컨트롤에 대한 동일한 이벤트를 처리할 수도 있습니다. 예를 들어 폼에 컨트롤 그룹이 RadioButton 있는 경우 모든 Click이벤트에 대한 RadioButton 단일 이벤트 처리기를 만들 수 있습니다. 자세한 내용은 컨트롤 이벤트를 처리하는 방법을 참조하세요.