4단계: 각 레이블에 클릭 이벤트 처리기 추가

Visual Studio 2017 RC에 대한 최신 설명서는 Visual Studio 2017 RC 설명서를 참조하세요.

일치 게임은 다음과 같은 방식으로 진행됩니다.

  1. 플레이어가 아이콘이 숨겨져 있는 사각형 중 하나를 선택하면 프로그램에서 아이콘 색을 검은색으로 변경하여 플레이어에게 해당 아이콘을 보여 줍니다.

  2. 플레이어가 다른 숨겨진 아이콘을 선택합니다.

  3. 아이콘이 일치하면 해당 아이콘이 표시되고 일치하지 않으면 두 아이콘 모두 다시 숨겨집니다.

    프로그램이 이런 방식으로 작동하게 하려면 선택한 레이블의 색을 변경하는 Click 이벤트 처리기를 추가해야 합니다.

각 레이블에 Click 이벤트 처리기를 추가하려면

  1. Windows Forms 디자이너에서 폼을 엽니다. 솔루션 탐색기에서 Form1.cs 또는 Form1.vb를 선택합니다. 메뉴 모음에서 보기, 디자이너를 차례로 선택합니다.

  2. 첫 번째 레이블 컨트롤을 선택합니다. 그런 다음 Ctrl 키를 누른 상태에서 다른 레이블을 각각 선택합니다. 모든 레이블이 선택되어야 합니다.

  3. 속성 창의 도구 모음에서 이벤트 단추를 선택하여 속성 창의 이벤트 페이지를 표시합니다. 다음 그림과 같이 Click 이벤트 위치까지 아래로 스크롤한 후 상자에 label_Click을 입력합니다.

    Click 이벤트가 표시된 속성 창
    Click 이벤트가 표시된 속성 창

  4. Enter 키를 선택합니다. IDE에서 label_Click()이라는 Click 이벤트 처리기를 코드에 추가하고 폼의 각 레이블에 후크합니다.

  5. 다음과 같이 코드의 나머지 부분을 채워 넣습니다.

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            clickedLabel.ForeColor = Color.Black;
        }
     }
    
    ''' <summary>
    ''' Every label's Click event is handled by this event handler
    ''' </summary>
    ''' <param name="sender">The label that was clicked</param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub label_Click(ByVal sender As System.Object, 
                            ByVal e As System.EventArgs) Handles Label9.Click, 
        Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, 
        Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, 
        Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click
    
        Dim clickedLabel = TryCast(sender, Label)
    
        If clickedLabel IsNot Nothing Then
    
            ' If the clicked label is black, the player clicked 
            ' an icon that's already been revealed -- 
            ' ignore the click
            If clickedLabel.ForeColor = Color.Black Then Exit Sub
    
            clickedLabel.ForeColor = Color.Black
        End If
    End Sub
    
    참고

    코드를 수동으로 입력하는 대신 label_Click() 코드 블록을 복사하여 붙여 넣는 경우에는 기존 label_Click() 코드를 대체해야 합니다. 이렇게 하지 않으면 중복된 코드 블록이 남게 됩니다.

    참고

    자습서 2: 시간이 지정된 수학 퀴즈 만들기 자습서에서 사용된 것과 같이 이벤트 처리기의 맨 위에 있는 object sender를 확인할 수 있습니다. 단일 이벤트 처리기 메서드에 대해 다양한 레이블 컨트롤 Click 이벤트를 후크했으므로 사용자가 선택하는 레이블에 관계없이 동일한 메서드가 호출됩니다. 이벤트 처리기 메서드에서 어떤 레이블이 선택되었는지 알아야 하므로 레이블 컨트롤을 식별하기 위한 sender라는 이름을 사용합니다. 메서드의 첫 번째 줄을 보면 단순히 일반 개체가 아니라 레이블 컨트롤임을 명시적으로 나타내고 clickedLabel이라는 이름을 사용하여 레이블의 속성 및 메서드에 액세스한다는 것을 알 수 있습니다.

    이 메서드는 먼저 clickedLabel이 개체에서 레이블 컨트롤로 변환(캐스팅)되었는지 여부를 확인합니다. 성공적으로 변환되지 않은 경우에는 null(C#) 또는 Nothing(Visual Basic) 값을 포함하고 메서드의 나머지 코드를 실행하지 않습니다. 다음으로 메서드는 레이블의 ForeColor 속성을 사용하여 선택된 레이블의 텍스트 색을 확인합니다. 레이블의 텍스트 색이 검정이면 아이콘이 이미 선택되었음을 의미하며 메서드는 완료됩니다. 즉, return 문에서 메서드 실행을 중지하도록 프로그램에 요청합니다. 그렇지 않은 경우 아이콘이 선택되지 않은 것이므로 프로그램에서 레이블의 텍스트 색을 검정으로 변경합니다.

  6. 메뉴 표시줄에서 파일, 모두 저장을 선택하여 진행 상황을 저장한 다음, 메뉴 모음에서 디버그, 디버깅 시작을 선택하여 프로그램을 실행합니다. 파란색 배경의 빈 폼이 나타납니다. 이때 폼의 아무 셀이나 선택하면 아이콘 중 하나를 볼 수 있어야 합니다. 폼에서 다른 위치를 계속 선택해 보십시오. 아이콘을 선택하면 폼에 나타납니다.

계속하거나 검토하려면