Шаг 5. Добавление обработчика событий MouseEnter для каждой стенки
Игра "Лабиринт" будет более трудной и интересной если каждый раз, когда указатель касается стены, возвращать указатель мыши пользователя назад к начальной позиции.Перед тем, как читать дальше, подумайте, как это можно сделать.
Для видео версии этого раздела см. в разделе Учебное руководство 2. Создание лабиринта в Visual Basic - видео 3 OR Учебное руководство 2. Создание лабиринта в c# - видео 3.
Добавление обработчика событий MouseEnter для каждой стенки
Перейдите в конструктор Windows Forms и выделите любую из вновь добавленных стен.
Перейдите в окно Свойства и щелкните по значку Событие, чтобы отобразить события для этой стены.Прокрутите вниз до события MouseEnter.Вместо двойного щелчка по нему введите текст wall_MouseEnter, затем нажмите клавишу ВВОД.Появится значок Событие и окно Свойства, как показано на рисунке ниже.
Значок события
Окно свойств, отображающее событие MouseEnter
Примечание Если ввести имя события непосредственно в таблицу событий в окне Свойства, это прямо указывает интегрированной среде разработки создать обработчик события с этим именем и присоединить его к событию элемента управления.Часто необходимо, чтобы интегрированная среда разработки выбирала имена событий, так как имена являются логичными, использование имен облегчает другим чтение и понимание кода.Когда интегрированная среда разработки выбирает имя для обработчика событий, она использует имя элемента управления и имя события.В данном случае имена стен по умолчанию не менялись, и они выглядят как label4, label18, label25 и так далее.Поэтому, если щелкнуть по стене с именем label12, интегрированная среда разработки назовет обработчик событий как label12_MouseEnter.Путем ввода имени wall_MouseEnter, выбирается более подходящее имя.Это особенно важно при использовании одного обработчика событий для нескольких элементов управления, что будет сделано далее в этом руководстве.
После нажатия клавиши ВВОД интегрированная среда разработки добавляет новый обработчик событий и присоединяет его к событию этой стены MouseEnter.В редакторе кода должен появиться вновь добавленный код, как показано на рисунке ниже.В Visual Basic указанная метка может не быть меткой с именем Label8, как показано в коде.
Private Sub wall_MouseEnter() Handles Label8.MouseEnter End Sub
private void wall_MouseEnter(object sender, EventArgs e) { }
Затем добавьте вызов метода MoveToStart() вместе с комментарием, который поясняет метод.Начните с перехода к методу и добавлением оператора MoveToStart().Откроется окно IntelliSense, содержание которого показано на рисунке ниже.
Окно IntelliSense
При добавлении метода MoveToStart(), интегрированная среда разработки добавила его в окно IntelliSense.Добавленный XML-комментарий отображается в подсказке.Это полезно, когда в программе существует множество методов.
Чтобы указать IntelliSense завершить имя метода, нажмите клавишу TAB.При написании кода Visual C# code, не забывайте добавлять точку с запятой (;) в конце оператора.Затем добавьте комментарий перед инструкцией.Код должен выглядеть так, как показано ниже.В Visual Basic указанная метка может не быть меткой с именем Label8, как показано в коде.
Private Sub wall_MouseEnter() Handles Label8.MouseEnter ' When the mouse pointer hits a wall or enters the panel, ' call the MoveToStart() method. MoveToStart() End Sub
private void wall_MouseEnter(object sender, EventArgs e) { // When the mouse pointer hits a wall or enters the panel, // call the MoveToStart() method. MoveToStart(); }
Сохраните и выполните программу.Переместите указатель мыши над стеной, к которой присоединен обработчик событий.(если не помните стену, перемещайте указатель над каждой стеной, пока не найдете нужную). Как только указатель коснется стены, он будет отправлен назад к начальной позиции.
Далее необходимо сделать тоже самое для оставшихся стен.Можно написать такой же обработчик событий MouseEnter для каждой из стен.Однако этот процесс будет длительным, приведет к появлению множества строк одинакового кода в программе и будет сложным для изменений.Интегрированная среда разработки предоставляет простой способ для соединения одного обработчика событий со всеми стенами.
Перейдите в конструктор Windows Forms. В меню Правка выберите пункт Выделить все.
Удерживая клавишу CTRL затем щелкните метку Завершить, чтобы снять выделение.В результате на панели должны остаться выделенными только стены.
В окне Свойства перейдите в таблицу событий.Прокрутите содержимое окна к событию MouseEnter и щелкните поле ввода рядом с ним.В нем должна быть стрелка раскрывающегося списка.Если щелкнуть по стрелке, должен появиться список всех обработчиков событий в программе, которые можно выбрать для этого события.В данном случае в списке должен быть обработчик событий finishLabel_MouseEnter, который был добавлен ранее, и обработчик событий wall_MouseEnter, который был написан только что, как показано на рисунке ниже.
Событие MouseEnter с обработчиками событий
Выделите обработчик событий wall_MouseEnter.Если выбрать неправильный обработчик событий либо случайно добавить новый обработчик событий, можно снова выделить все стены и панель, а затем выбрать нужный метод.
Теперь игра в лабиринт должна быть более интересной.Попробуйте сохранить и запустить ее.Если указатель наткнется на стену или указатель будет перемещен за пределы лабиринта и возвращен обратно, программа должна автоматически перемещать указатель в начальную позицию лабиринта.
Продолжить или повторить пройденный материал
Следующий шаг руководства см. в разделе Шаг 6. Добавление объекта SoundPlayer.
Предыдущий шаг руководства см. в разделе Шаг 4. Добавление метода для перезапуска игры.