Шаг 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) в форму.Однако эти операторы не приводят к появлению в форме двух дополнительных элементов управления Label, поскольку у них отсутствует оператор new.Без оператора new объект не создается.Вот почему firstClicked и secondClicked называются ссылочными переменными — они просто отслеживают (или ссылаются на) объекты Label.
Примечание Когда переменная не отслеживает объект, ей задается специальное значение — null в Visual C# и Nothing в Visual Basic.Поэтому при запуске программы переменным firstClickedи secondClicked задано значение null или Nothing. Это означает, что переменные ничего не отслеживают.
Измените свой обработчик событий 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; } } }
Сохраните и выполните программу.Щелкните один из элементов управления Label и отобразится его значок.
Щелкните следующий элемент управления Label и обратите внимание, что ничего не происходит.Программа уже отслеживает первую метку, которую щелкнул игрок, поэтому firstClicked не равно null в Visual C# или Nothing в Visual Basic.Когда оператор if проверяет, имеет ли переменная firstClicked значение null или Nothing, он обнаруживает, что это не так, и не выполняет операторы в блоке if.Поэтому только первый значок, который щелкнули, становится черным, а другие значки остаются невидимыми, как показано на следующем рисунке.
Игра "Подбери пару!", отображающая один значок
Продолжить или повторить пройденный материал
Следующий шаг руководства см. в разделе Шаг 6. Добавление таймера.
Предыдущий шаг руководства см. в разделе Шаг 4. Добавление к каждой метке обработчика событий щелчка мышью.