5단계: 레이블 참조 추가Step 5: Add Label References

프로그램에서는 플레이어가 선택하는 레이블 컨트롤을 추적해야 합니다.The program needs to track which label controls the player chooses. 지금은 프로그램에 플레이어가 선택한 모든 레이블이 표시됩니다.Right now, the program shows all labels chosen by the player. 이는 나중에 변경할 것입니다.But we're going to change that. 첫 번째 레이블이 선택된 후 해당 레이블의 아이콘이 표시됩니다.After the first label is chosen, the program should show the label's icon. 두 번째 레이블이 선택된 후에는 프로그램에 두 아이콘이 모두 잠깐 표시된 후 다시 숨겨집니다.After the second label is chosen, the program should display both icons for a brief time, and then hide both icons again. 프로그램에서는 이제 참조 변수를 사용하여 첫 번째 선택한 레이블 컨트롤과 두 번째 선택한 레이블 컨트롤을 추적합니다.Your program will now keep track of which label control is chosen first and which is chosen second by using reference variables.

레이블 참조를 추가하려면To add label references

  1. 다음 코드를 사용하여 폼에 레이블 참조를 추가합니다.Add label references to your form by using the following code.

    Public Class Form1
    
        ' firstClicked points to the first Label control 
        ' that the player clicks, but it will be Nothing 
        ' if the player hasn't clicked a label yet
        Private firstClicked As Label = Nothing
    
        ' secondClicked points to the second Label control 
        ' that the player clicks
        Private secondClicked As Label = Nothing
    
    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

    이러한 참조 변수는 이전에 폼에 개체(예: Timer 개체, List 개체 및 Random 개체)를 추가할 때 사용한 문과 비슷합니다.These reference variables look similar to the statements you used earlier to add objects (like Timer objects, List objects, and Random objects) to your form. 그러나 두 문 중 하나에 new 키워드가 사용되지 않았으므로 이러한 문을 통해 두 개의 추가 레이블 컨트롤이 폼에 나타나지 않습니다.However, these statements don't cause two extra label controls to appear on the form because there's no new keyword used in either of the two statements. new 키워드가 없으면 개체가 만들어지지 않습니다.Without the new keyword, no object is created. 이 때문에 firstClickedsecondClicked를 참조 변수라고 합니다. 참조 변수는 Label 개체를 추적 또는 참조만 합니다.That's why firstClicked and secondClicked are called reference variables: They just keep track (or, refer to) Label objects.

    변수가 개체를 추적하지 않으면 null(Visual C#의 경우)과 Nothing(Visual Basic의 경우)이라는 예약된 특수 값이 변수에 설정됩니다.When a variable isn't keeping track of an object, it's set to a special reserved value: null in Visual C# and Nothing in Visual Basic. 따라서 프로그램이 시작되면 firstClickedsecondClicked 둘 다 null 또는 Nothing으로 설정되며, 이는 변수가 아무것도 추적하고 있지 않음을 나타냅니다.So, when the program starts, both firstClicked and secondClicked are set to null or Nothing, which means that the variables aren't keeping track of anything.

  2. firstClicked 참조 변수를 사용하도록 Click 이벤트 처리기를 수정합니다.Modify your Click event handler to use the new firstClicked reference variable. label_Click() 이벤트 처리기 메서드의 마지막 문(clickedLabel.ForeColor = Color.Black;)을 제거하고 다음에 나오는 if 문으로 바꿉니다.Remove the last statement in the label_Click() event handler method (clickedLabel.ForeColor = Color.Black;) and replace it with the if statement that follows. (주석 및 전체 if 문을 포함해야 합니다.)(Be sure you include the comment, and the whole if statement.)

    ''' <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
    
            ' If firstClicked is Nothing, this is the first icon 
            ' in the pair that the player clicked, 
            ' so set firstClicked to the label that the player
            ' clicked, change its color to black, and return
            If firstClicked Is Nothing Then
                firstClicked = clickedLabel
                firstClicked.ForeColor = Color.Black
                Exit Sub
            End If
        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;
    
            // If firstClicked is null, this is the first icon 
            // in the pair that the player clicked,
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
    
                return;
            }
        }
    }
    
  3. 프로그램을 저장하고 실행합니다.Save and run your program. 레이블 컨트롤 중 하나를 선택하면 아이콘이 나타납니다.Choose one of the label controls, and its icon appears.

  4. 다음 레이블 컨트롤을 선택하면 아무것도 실행되지 않습니다.Choose the next label control, and notice that nothing happens. 프로그램에서는 이미 플레이어가 선택한 첫 번째 레이블을 추적하고 있으므로 firstClickednull(Visual C#의 경우) 또는 Nothing(Visual Basic의 경우)과 같지 않습니다.The program is already keeping track of the first label that the player chose, so firstClicked isn't equal to null in Visual C# or Nothing in Visual Basic. if 문에서 firstClicked를 검사하여 null 또는 Nothing과 같은지 여부를 확인하는 경우 같지 않음을 알게 되고 if 문의 문을 실행하지 않습니다.When your if statement checks firstClicked to determine if it's equal to null or Nothing, it finds that it isn't, and it doesn't execute the statements in the if statement. 따라서 다음 그림과 같이 첫 번째 선택한 아이콘만 검은색으로 바뀌고 다른 아이콘은 표시되지 않습니다.So, only the first icon that's chosen turns black, and the other icons are invisible, as shown in the following picture.

    한 아이콘만 표시된 일치 게임Matching game showing one icon
    한 아이콘만 표시된 일치 게임Matching game showing one icon

    자습서의 다음 단계에서 타이머 컨트롤을 추가하여 이 문제를 해결합니다.You'll fix this situation in the next step of the tutorial by adding a Timer control.

계속하거나 검토하려면To continue or review