Перейти к содержанию
MediaSchool

События мыши и клавиатуры

§ 3, пример 3.12 и упражнения 5–6: KeyPress (Enter), MouseEnter/MouseLeave, «убегающая» кнопка и «Домой».

Открыт · Презентация · Методичка

Конспект урока

События мыши и клавиатуры

Научи приложение реагировать на Enter и на наведение указателя — не только на щелчок кнопки.

Клавиша и наведение — отдельные факты. У каждого своё событие и свой обработчик.

Результат урока

По демонстрации разберёшь KeyPress и Enter; в своей папке CatchMe создашь обработчик MouseEnter для «убегающей» кнопки и Click «Домой», проверишь реакцию и повторно откроешь проект. MouseLeave смотришь в демо HoverZone.

Перед началом

Работай в своей папке и соблюдай правила кабинета. При неисправности остановись и обратись к учителю. Для основного проекта нужна проверенная учителем среда PascalABC.NET под Windows с дизайнером Windows Forms.

Вспомни: на прошлых уроках расчёт и смена надписи запускал Click кнопки. Сегодня источник события может быть другим: текстовое поле или зона под указателем.

Основа — пример 3.12 «Знакомство» и упражнения 5–6 к § 3. В учебнике встречаются имена Delphi (Edit, Caption, OnKeyPress). В нашем комплекте, как на уроках 2–4, используем TextBox, Text, KeyPress. § 3.5* (CheckBox и RadioButton) сегодня не изучаем.

Разные события — разные факты

СобытиеКогда возникаетТипичный объект
ClickЩелчок по элементуButton
KeyPressНажата клавиша с текстовым символомTextBox
MouseEnterУказатель вошёл в область элементаButton, Panel
MouseLeaveУказатель покинул областьТот же элемент

Одно и то же видимое изменение на экране может быть вызвано разными событиями. Поэтому в объяснении всегда называй объект и событие.

KeyPress и клавиша Enter

Событие KeyPress передаёт символ нажатой клавиши в параметре e.KeyChar. Код клавиши Enter — символ #13. Пока условие не выполнено, приветствие не показывается: обычные буквы только меняют текст поля.

Пользователь нажимает клавишу. Программа решает, нужно ли реагировать на этот символ.

Демонстрация MeetName

Учитель показывает проект Windows Forms MeetName (можно повторить у себя по шагам). Заголовок формы — «Знакомство».

ОбъектНастройка
label1Text = Введите своё имя и нажмите клавишу Enter; AutoSize=True
label2Text пустой; AutoSize=True
textBox1Text пустой; событие KeyPress

Выбери textBox1, создай обработчик KeyPress в инспекторе событий. Вставь код внутрь готовых begin … end. Не переписывай объявление процедуры.

if e.KeyChar = #13 then
begin
  label2.Text := textBox1.Text + ', приятно с вами познакомиться!';
  e.Handled := true;
end;

e.Handled := true

e.Handled := true сообщает системе, что символ уже обработан. У однострочного TextBox это убирает лишний сигнал при Enter. Без проверки #13 приветствие срабатывало бы на каждую букву — поэтому условие и Handled работают вместе.

Обработчик решает, что делать с символом, и может остановить дальнейшую стандартную реакцию.

Проверка MeetName

  1. Введи имя и нажми Enter — появится приветствие.
  2. Измени имя, но не нажимай Enter — надпись останется прежней.
  3. Нажми Enter снова — текст обновится.
  4. Пустое имя + Enter обсудите как возможное улучшение (резерв урока).

Приветствие появляется только после Enter, а не после каждой буквы.

Фокус ввода

Клавиатурные события получает тот элемент, у которого сейчас фокус. Если щёлкнуть по свободной области формы, фокус может уйти с поля, и textBox1.KeyPress не выполнится, пока поле снова не станет активным (щелчок по полю или Tab).

Перед вводом имени убедись, что курсор находится в textBox1.

MouseEnter без щелчка

MouseEnter срабатывает, когда указатель входит в область элемента. Щелчок не обязателен. Так можно менять цвет, текст статуса или положение элемента.

Факт события — пересечение границы области, а не нажатие кнопки мыши.

MouseLeave

MouseLeave срабатывает, когда указатель покидает область. Обычно возвращают исходный вид. В паре с MouseEnter получается понятная реакция наведения.

Вход и выход — два разных события одного и того же объекта.

Демонстрация HoverZone

Проект HoverZone, заголовок «Наведение». Добавь panel1 (или крупную кнопку как зону) и label1.

СобытиеДействие
panel1.MouseEnterpanel1.BackColor := Color.LightGreen; label1.Text := 'Указатель внутри';
panel1.MouseLeavepanel1.BackColor := Color.LightYellow; label1.Text := 'Указатель снаружи';

Наведи указатель без щелчка и уведи его обратно. Сравни с Click кнопки: здесь факт — движение указателя через границу элемента.

Пауза перед практикой

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

Практика: убегающая кнопка

Сохрани демонстрации. Скопируй подготовленный учителем каркас CatchMeShell в свою папку CatchMe_07 (07 — номер места) и открой .pabcproj из копии. Допиши два обработчика. Это адаптация упражнений 5–6 учебника.

Кнопка «убегает» при входе указателя в её область — без обязательного щелчка.

ОбъектРоль
Form1Text = Убегающая кнопка
button1Text = Поймай меня; событие MouseEnter
button2Text = Домой; событие Click
label1Text = Старт; AutoSize=True

Перемещение по наведению

Внутри button1.MouseEnter:

var rnd := new Random;
var maxX, maxY: integer;
if ClientSize.Width > button1.Width then
  maxX := ClientSize.Width - button1.Width
else
  maxX := 0;
if ClientSize.Height > button1.Height then
  maxY := ClientSize.Height - button1.Height
else
  maxY := 0;
button1.Left := rnd.Next(0, maxX + 1);
button1.Top := rnd.Next(0, maxY + 1);
label1.Text := 'Убежала';

Границы нужны, чтобы кнопка не ушла за край клиентской области. В .NET верхняя граница Next исключительная, поэтому используют maxX + 1.

Кнопка «Домой»

Внутри button2.Click:

button1.Left := 20;
button1.Top := 20;
label1.Text := 'Дома';

Здесь нужен именно щелчок по button2 — это другое событие, чем наведение на button1.

Лист проверки

Сначала запиши прогноз, затем выполни действие.

ДействиеПрогнозНаблюдение
Новый запуск________________
Навести на «Поймай меня»________________
Навести ещё раз________________
Нажать «Домой»________________
Снова навести на кнопку________________
Щёлкнуть по форме________________
Сохранить, открыть снова, навести________________

Сохранение и повторное открытие

  1. Выполни «Сохранить все», останови приложение и закрой проект.
  2. Через «Файл → Открыть проект» открой .pabcproj из своей папки.
  3. Запусти заново и проверь наведение и «Домой».
  4. Передай всю исходную папку проекта и личный лист. Один снимок окна не заменяет исходники.

Сохраняй проект целиком и проверяй его после повторного открытия.

Критерии готовности

Шесть диагностических баллов: проект повторно открывается; элементы подписаны верно; MouseEnter перемещает кнопку без обязательного щелчка; кнопка остаётся видимой; «Домой» возвращает её в угол и обновляет статус; в листе есть прогнозы и отличие MouseEnter от Click. Баллы дают обратную связь и не переводятся автоматически в отметку.

Если остаётся время: в MeetName отклони пустое имя; или по упражнению 2 учебника покажи дополнительные надписи через Visible после Enter.

Если результат отличается

НаблюдениеЧто проверить
Кнопка уходит за крайВычисление maxX / maxY с учётом ширины и высоты
Реакция только по щелчкуСобытие MouseEnter, а не только Click
Приветствие на каждую буквуУсловие e.KeyChar = #13
Клавиши «не работают»Фокус на textBox1
После открытия нет реакцииСохранён ли код; открыт ли свой .pabcproj
Enter даёт лишний сигналСтоит ли e.Handled := true после проверки #13

Объясни самостоятельно

  1. В MeetName пользователь нажал Enter. Какое событие какого объекта вызвало приветствие? Чем это отличается от Click кнопки «Вычислить»?
  2. Почему для «убегающей» кнопки достаточно навести указатель? Какие события соответствуют входу и выходу указателя в HoverZone?
  3. Ученик щёлкнул по форме и нажимает клавиши. Почему textBox1.KeyPress может не сработать?

Домашнее задание

§ 3 (фрагмент про текстовое поле и KeyPress), пример 3.12. Письменно: 1) какая проверка нужна для Enter; 2) чем MouseEnter отличается от Click; 3) зачем кнопка «Домой» в упражнении 6. По желанию при доступе к Windows доработать CatchMe или MeetName. Установка программ дома не требуется. § 3.5* не задаётся.

Источники

Котов В. М. и др. «Информатика. 11 класс», 2021: § 3, пример 3.12, упражнения 5–6. Электронная копия. Эл. приложение § 3.

Microsoft Learn: KeyPress, KeyChar, MouseEnter, MouseLeave. Среда: PascalABC.NET.

MeetName, HoverZone, CatchMe, границы ClientSize, листы и одиннадцать иллюстраций — авторская адаптация. Изображения условные и не являются снимками установленной среды.

Скачать и открыть

Материалы урока

2 материала

Подготовка к уроку

2 материала

От сообщества

Материалы сообщества0

Дополнения от учителей к этому уроку. Проверены модерацией, но не являются редакционным контентом MediaSchool.

Поделиться материалом

Поделитесь первым материалом

Рабочий лист, презентация или методичка помогут другим учителям подготовиться к уроку.

Комментарии

Войдите, чтобы оставлять комментарии.

Пока нет комментариев. Будьте первым!