Поделиться через


Шаг 5. Добавление ссылок на метки

Программе необходимо отслеживать, какой элемент управления Label щелкнул игрок.После щелчка первой метки программа показывает ее значок.После щелчка второй метки программа должна показать оба значка на короткое время, а затем снова их скрыть.Программа будет отслеживать с помощью ссылочных переменных, какой элемент управления Label щелкнули первым, а какой вторым.

Добавление ссылок на метки

  1. Добавьте ссылки на метки в свою форму, используя следующий код.

    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) в форму.Однако эти операторы не приводят к появлению в форме двух дополнительных элементов управления Label, поскольку у них отсутствует оператор new.Без оператора new объект не создается.Вот почему firstClicked и secondClicked называются ссылочными переменными — они просто отслеживают (или ссылаются на) объекты Label.

    ПримечаниеПримечание

    Когда переменная не отслеживает объект, ей задается специальное значение — null в Visual C# и Nothing в Visual Basic.Поэтому при запуске программы переменным firstClickedи secondClicked задано значение null или Nothing. Это означает, что переменные ничего не отслеживают.

  2. Измените свой обработчик событий Click для использования новой ссылочной переменной firstClicked.Удалите последний оператор (clickedLabel.ForeColor = Color.Black;) в методе обработчика событий label_Click() и замените его последующим оператором 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;
            }
        }
    }
    
  3. Сохраните и выполните программу.Щелкните один из элементов управления Label и отобразится его значок.

  4. Щелкните следующий элемент управления Label и обратите внимание, что ничего не происходит.Программа уже отслеживает первую метку, которую щелкнул игрок, поэтому firstClicked не равно null в Visual C# или Nothing в Visual Basic.Когда оператор if проверяет, имеет ли переменная firstClicked значение null или Nothing, он обнаруживает, что это не так, и не выполняет операторы в блоке if.Поэтому только первый значок, который щелкнули, становится черным, а другие значки остаются невидимыми, как показано на следующем рисунке.

    Игра "Подбери пару!", отображающая один значок

    Игра "Подбери пару!", отображающая один значок

Продолжить или повторить пройденный материал