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


Шаг 4. Добавление к каждой метке обработчика событий щелчка мышью

Игра "Подбери пару!" работает следующим образом.

  1. Когда игрок выбирает один из квадратов со скрытым значком, программа показывает значок игроку, изменяя цвет значка на черный.

  2. После этого игрок выбирает другой скрытый значок.

  3. Если значки совпадают, они остаются видимыми.Если нет, оба значка снова скрываются.

Чтобы программа работала именно так, добавьте обработчик событий Click, изменяющий цвет выбираемой метки.

Добавление обработчика событий Click к каждой метке

  1. Откройте форму в конструкторе Windows Forms.В обозревателе решений выберите Form1.cs или Form1.vb.В строке меню выберите Вид, Конструктор.

  2. Выберите первый элемент Label, чтобы выделить его.Затем, удерживая нажатой клавишу CTRL, выберите каждую из оставшихся меток, чтобы выбрать и их.Убедитесь, что выбраны все метки.

  3. Нажмите кнопку События на панели инструментов в окне Свойства, чтобы открыть страницу События в окне Свойства.Прокрутите вниз до события Click и введите label_Click в поле, как показано на следующем рисунке.

    Окно свойств, отображающее событие Click

    Окно свойств, отображающее событие Click

  4. Нажмите клавишу ВВОД.Интегрированная среда разработки добавит обработчик событий Click, который называется label_Click(), в код и подключит его к каждой метке в форме.

  5. Добавьте остальную часть кода следующим образом:

    ''' <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;
        }
     }
    
    ПримечаниеПримечание

    При копировании и вставке блока кода label_Click() вместо его ввода вручную проследите за тем, что заменить существующий код label_Click().В противном случае в коде появится дублирующий блок.

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

    Возможно, вы узнали object sender в верхней части обработчика событий; он совпадает с кодом в руководстве Учебное руководство 2. Создание ограниченной по времени математической головоломки.Поскольку вы подключили различные события Click элемента управления Label к одному методу обработчика событий, один и тот же метод вызывается независимо от того, какую метку щелкнет пользователь.Методу обработчика событий необходимо знать, какую метку выбрал игрок, поэтому для определения элемента управления Label используется имя sender.Первая строка метода сообщает программе, что это не просто универсальный объект, а элемент управления Label, для обращения к свойствам и методам которого используется имя clickedLabel.

    Этот метод сначала проверяет, было ли успешно выполнено преобразование (приведение) clickedLabel из объекта в элемент управления Label.Если операция завершилась неудачно, его значение будет null (C#) или Nothing (Visual Basic) и оставшаяся часть кода метода не будет выполнена.Затем метод с помощью свойства ForeColor элемента управления Label метод проверяет цвет текста выбранной метки.Если цвет текста метки черный, это это означает, что значок уже был выбран, а метод выполнен. (Для этого и нужен оператор return. Он сообщает программе, что необходимо остановить выполнение метода.) В противном случае значок не был выбран, поэтому программа изменяет цвет текста метки на черный.

  6. В строке меню выберите Файл, Сохранить все, чтобы сохранить ход выполнения, а затем в строке меню выберите Отладка, Начать отладку, чтобы запустить программу.Вы должны увидеть пустую форму с синим фоном.Выберите любую ячейку в форме, и один из значков станет видимым.Продолжайте выбирать различные ячейки формы.Значки будут отображаться при их выборе.

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