컨트롤 이벤트를 처리하는 방법(Windows Forms .NET)

컨트롤의 이벤트(및 양식)는 일반적으로 Windows Forms의 Visual Studio 비주얼 디자이너를 통해 설정됩니다. 비주얼 디자이너를 통해 이벤트를 설정하면 디자인 타임에서 이벤트를 처리하는 것으로 알려져 있습니다. 런타임에서 이벤트를 처리하는 것으로 알려진 코드에서 동적으로 이벤트를 처리할 수도 있습니다. 런타임에 생성된 이벤트를 사용하면 앱에서 현재 수행 중인 작업에 따라 이벤트 처리기를 동적으로 연결할 수 있습니다.

중요

.NET 7 및 .NET 6에 관한 데스크톱 가이드 설명서는 제작 중입니다.

이벤트 처리 - 디자이너

Visual Studio에서 비주얼 디자이너를 사용하여 이벤트를 제어할 수 있는 처리기를 관리합니다. 비주얼 디자이너에서 처리기 코드를 생성하고 이벤트에 추가합니다.

처리기 설정

속성 창을 사용하여 이벤트의 처리기를 추가하거나 설정합니다.

  1. 변경할 컨트롤이 포함된 양식의 비주얼 디자이너를 엽니다.

  2. 컨트롤을 선택합니다.

  3. 이벤트 단추()를 눌러 속성 창 모드를 이벤트로 변경합니다.

  4. 처리기를 추가할 이벤트를 찾습니다(예: Click 이벤트).

    이벤트 모드 사용 및 클릭 이벤트가 표시된 Visual Studio 속성 창.

  5. 다음 작업 중 하나를 수행합니다.

    • 새 처리기를 생성하려면 이벤트를 두 번 클릭합니다. 할당된 처리기가 없으면 비어 있습니다. 비어 있지 않으면 이 작업에서 양식에 대한 코드를 열고 기존 처리기로 이동합니다.

    • 선택 상자()를 사용하여 기존 처리기를 선택합니다.

      선택 상자에는 이벤트 처리기와 호환되는 메서드 서명이 있는 모든 메서드가 나열됩니다.

처리기 지우기

양식의 코드 숨김 파일에 있는 처리기 코드를 삭제하여 이벤트 처리기를 제거할 수 없습니다. 이벤트에서 계속 이 코드를 참조하기 때문입니다. 속성 창을 사용하여 이벤트의 처리기를 제거합니다.

  1. 변경할 컨트롤이 포함된 양식의 비주얼 디자이너를 엽니다.

  2. 컨트롤을 선택합니다.

  3. 이벤트 단추()를 눌러 속성 창 모드를 이벤트로 변경합니다.

  4. 제거할 처리기가 포함된 이벤트를 찾습니다(예: Click 이벤트).

    이벤트 모드 사용 및 클릭 이벤트가 표시된 Visual Studio 속성 창.

  5. 이벤트를 마우스 오른쪽 단추로 클릭하고 다시 설정을 선택합니다.

이벤트 처리 - 코드

일반적으로 비주얼 디자이너를 통해 디자인 타임에서 이벤트 처리기를 컨트롤에 추가합니다. 그러나 런타임에 컨트롤을 만들 수 있습니다 .이 경우 코드에 이벤트 처리기를 추가해야 합니다. 코드에 처리기를 추가하면 같은 이벤트에 처리기를 여러 개 추가할 수도 있습니다.

처리기 추가

다음 예제에서는 컨트롤을 만들고 이벤트 처리기를 추가하는 방법을 보여줍니다. 이 컨트롤은 Button.Click 이벤트 처리기에서 다른 단추를 만듭니다. Button1을 누르면 코드는 새 단추로 이동하여 단추 크기를 조정합니다. 새 단추의 Click 이벤트는 MyNewButton_Click 메서드에서 처리됩니다. 새 단추를 표시하려면 양식의 Controls 컬렉션에 추가됩니다. Button1.Click 이벤트 처리기를 제거하는 코드도 있습니다. 처리기 제거 섹션에서 이를 설명합니다.

private void button1_Click(object sender, EventArgs e)
{
    // Create and add the button
    Button myNewButton = new()
    {
        Location = new Point(10, 10),
        Size = new Size(120, 25),
        Text = "Do work"
    };

    // Handle the Click event for the new button
    myNewButton.Click += MyNewButton_Click;
    this.Controls.Add(myNewButton);

    // Remove this button handler so the user cannot do this twice
    button1.Click -= button1_Click;
}

private void MyNewButton_Click(object sender, EventArgs e)
{
    
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Create and add the button
    Dim myNewButton As New Button() With {.Location = New Point(10, 10),
                                          .Size = New Size(120, 25),
                                          .Text = "Do work"}

    'Handle the Click event for the new button
    AddHandler myNewButton.Click, AddressOf MyNewButton_Click
    Me.Controls.Add(myNewButton)

    'Remove this button handler so the user cannot do this twice
    RemoveHandler Button1.Click, AddressOf Button1_Click
End Sub

Private Sub MyNewButton_Click(sender As Object, e As EventArgs)

End Sub

이 코드를 실행하려면 Visual Studio 비주얼 디자이너를 사용하여 양식에 다음을 수행합니다.

  1. 새 단추를 양식에 추가하고 이름을 Button1로 지정합니다.
  2. 이벤트 단추()를 눌러 속성 창 모드를 이벤트로 변경합니다.
  3. Click 이벤트를 두 번 클릭하여 처리기를 생성합니다. 이 작업은 코드 창을 열고 빈 Button1_Click 메서드를 생성합니다.
  4. 메서드 코드를 위에 있는 이전 코드로 바꿉니다.

C# 이벤트에 대한 자세한 내용은 이벤트(C#)를 참조하세요. Visual Basic 이벤트에 대한 자세한 내용은 이벤트(Visual Basic)를 참조하세요.

처리기 제거

처리기 추가 섹션에서는 일부 코드를 사용하여 처리기를 추가하는 방법을 보여줍니다. 또한 이 코드에는 다음과 같은 처리기를 제거하는 호출이 포함되어 있습니다.

button1.Click -= button1_Click;
RemoveHandler Button1.Click, AddressOf Button1_Click

이 구문은 모든 이벤트에서 이벤트 처리기를 제거하는 데 사용될 수 있습니다.

C# 이벤트에 대한 자세한 내용은 이벤트(C#)를 참조하세요. Visual Basic 이벤트에 대한 자세한 내용은 이벤트(Visual Basic)를 참조하세요.

동일한 처리기를 사용하여 여러 이벤트를 사용하는 방법

Visual Studio 비주얼 디자이너의 속성 창을 사용하면 다른 이벤트에서 이미 사용 중인 동일한 처리기를 선택할 수 있습니다. 처리기 설정 섹션의 지침에 따라 새 처리기를 만드는 대신 기존 처리기를 선택합니다.

C#에서 처리기는 비주얼 디자이너를 통해 변경되는 양식 디자이너 코드의 컨트롤 이벤트에 연결됩니다. C# 이벤트에 대한 자세한 내용은 이벤트(C#)를 참조하세요.

Visual Basic

Visual Basic에서 처리기는 이벤트 처리기 코드가 선언되는 양식의 코드 숨김 파일의 컨트롤 이벤트에 연결됩니다. Handles 키워드 여러 개를 이벤트 처리기 코드에 추가하여 여러 이벤트와 함께 사용할 수 있습니다. 비주얼 디자이너에서 자동으로 Handles 키워드를 생성하고 이벤트 처리기에 추가합니다. 그러나 처리기 메서드의 서명이 이벤트와 일치하면 컨트롤 이벤트와 이벤트 처리기에 이 작업을 간편하게 수행할 수 있습니다. Visual Basic 이벤트에 대한 자세한 내용은 이벤트(Visual Basic)를 참조하세요.

이 코드에서는 동일한 메서드를 서로 다른 Button.Click 이벤트 두 개에 대한 처리기로 사용할 수 있는 방법을 보여줍니다.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
    'Do some work to handle the events
End Sub

참고 항목