5단계: 레이블 참조 추가
프로그램에서는 플레이어가 클릭하는 Label 컨트롤을 추적해야 합니다.첫 번째 레이블이 클릭된 후 해당 레이블의 아이콘이 표시됩니다.두 번째 레이블이 클릭된 후에는 두 아이콘을 모두 잠깐 표시한 후 다시 보이지 않도록 설정해야 합니다.프로그램에서는 참조 변수를 사용하여 첫 번째 클릭한 Label 컨트롤과 두 번째 클릭한 컨트롤을 추적합니다.
레이블 참조를 추가하려면
다음 코드를 사용하여 폼에 레이블 참조를 추가합니다.
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 개체)를 추가할 때 사용한 문과 비슷합니다.그러나 이러한 문은 new가 없으므로 두 개의 추가 Label 컨트롤이 폼에 나타나지 않습니다.new가 없으면 개체가 만들어지지 않습니다.이 때문에 firstClicked와 secondClicked를 참조 변수라고 합니다. 참조 변수는 Label 개체를 추적 또는 참조만 합니다.
[!참고]
변수가 개체를 추적하지 않으면 null(Visual C#의 경우)과 Nothing(Visual Basic의 경우)이라는 특수한 값이 변수에 설정됩니다.따라서 프로그램이 시작되면 firstClicked와 secondClicked 둘 다 null 또는 Nothing으로 설정되며, 이는 변수가 아무 것도 추적하고 있지 않음을 나타냅니다.
firstClicked 참조 변수를 사용하도록 Click 이벤트 처리기를 수정합니다.label_Click() 이벤트 처리기 메서드의 마지막 문(clickedLabel.ForeColor = Color.Black;)을 제거하고 다음에 나오는 if 문으로 바꿉니다.(메모를 하 고 전체를 포함 해야 합니다. if 문입니다.)
''' <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; } } }
프로그램을 저장하고 실행합니다.Label 컨트롤 중 하나를 클릭하면 아이콘이 나타납니다.
다음 Label 컨트롤을 클릭하면 아무 것도 실행되지 않습니다.프로그램에서는 이미 플레이어가 클릭한 첫 번째 레이블을 추적하고 있으므로 firstClicked는 null(Visual C#의 경우) 또는 Nothing(Visual Basic의 경우)과 같지 않습니다.if 문에서 firstClicked를 검사하여 null 또는 Nothing과 같은지 여부를 확인하는 경우 같지 않음을 알게 되고 if 문의 문을 실행하지 않습니다.따라서 다음 그림과 같이 첫 번째 클릭한 아이콘만 검은색으로 바뀌고 다른 아이콘은 표시되지 않습니다.
한 아이콘만 표시된 일치 게임
계속하거나 검토하려면
다음 자습서 단계로 이동하려면 6단계: 타이머 추가를 참조하십시오.
이전 자습서 단계로 돌아가려면 4단계: 각 레이블에 클릭 이벤트 처리기 추가를 참조하십시오.