다음을 통해 공유


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

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

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

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

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

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

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

  1. Windows Forms 디자이너로 이동한 후 첫 번째 Label 컨트롤을 클릭하여 선택합니다.그런 다음 Ctrl 키를 누른 상태에서 다른 레이블을 각각 클릭하여 선택합니다.모든 레이블이 선택되어야 합니다.

  2. 속성 창의 이벤트 페이지로 이동합니다.다음 그림과 같이 Click 이벤트 위치까지 아래로 스크롤한 후 상자에 label_Click을 입력합니다.

    Click 이벤트가 표시된 속성 창

    Click 이벤트가 표시된 속성 창

  3. Enter 키를 누릅니다.IDE에서 **label_Click()**이라는 Click 이벤트 처리기를 코드에 추가하고 각 레이블에 후크합니다.

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

    ''' <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
    
    /// <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;
        }
     }
    

    [!참고]

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

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

  5. 프로그램을 저장하고 실행합니다.파란색 배경의 빈 폼이 나타납니다.이때 폼을 클릭하면 아이콘 중 하나를 볼 수 있어야 합니다.폼에서 다른 위치를 계속 클릭해 보십시오.아이콘을 클릭하면 폼에 나타납니다.

계속하거나 검토하려면