События мыши и клавиатуры
§ 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 (можно повторить у себя по шагам). Заголовок формы — «Знакомство».
| Объект | Настройка |
|---|---|
label1 | Text = Введите своё имя и нажмите клавишу Enter; AutoSize=True |
label2 | Text пустой; AutoSize=True |
textBox1 | Text пустой; событие 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
- Введи имя и нажми Enter — появится приветствие.
- Измени имя, но не нажимай Enter — надпись останется прежней.
- Нажми Enter снова — текст обновится.
- Пустое имя + Enter обсудите как возможное улучшение (резерв урока).
Приветствие появляется только после Enter, а не после каждой буквы.
Фокус ввода
Клавиатурные события получает тот элемент, у которого сейчас фокус. Если щёлкнуть по свободной области формы, фокус может уйти с поля, и textBox1.KeyPress не выполнится, пока поле снова не станет активным (щелчок по полю или Tab).
Перед вводом имени убедись, что курсор находится в textBox1.
MouseEnter без щелчка
MouseEnter срабатывает, когда указатель входит в область элемента. Щелчок не обязателен. Так можно менять цвет, текст статуса или положение элемента.
Факт события — пересечение границы области, а не нажатие кнопки мыши.
MouseLeave
MouseLeave срабатывает, когда указатель покидает область. Обычно возвращают исходный вид. В паре с MouseEnter получается понятная реакция наведения.
Вход и выход — два разных события одного и того же объекта.
Демонстрация HoverZone
Проект HoverZone, заголовок «Наведение». Добавь panel1 (или крупную кнопку как зону) и label1.
| Событие | Действие |
|---|---|
panel1.MouseEnter | panel1.BackColor := Color.LightGreen; label1.Text := 'Указатель внутри'; |
panel1.MouseLeave | panel1.BackColor := Color.LightYellow; label1.Text := 'Указатель снаружи'; |
Наведи указатель без щелчка и уведи его обратно. Сравни с Click кнопки: здесь факт — движение указателя через границу элемента.
Пауза перед практикой
На минуту отведи взгляд от экрана, посмотри вдаль, расслабь плечи и кисти. Проверь посадку и переходи к самостоятельной работе.
Практика: убегающая кнопка
Сохрани демонстрации. Скопируй подготовленный учителем каркас CatchMeShell в свою папку CatchMe_07 (07 — номер места) и открой .pabcproj из копии. Допиши два обработчика. Это адаптация упражнений 5–6 учебника.
Кнопка «убегает» при входе указателя в её область — без обязательного щелчка.
| Объект | Роль |
|---|---|
Form1 | Text = Убегающая кнопка |
button1 | Text = Поймай меня; событие MouseEnter |
button2 | Text = Домой; событие Click |
label1 | Text = Старт; 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.
Лист проверки
Сначала запиши прогноз, затем выполни действие.
| Действие | Прогноз | Наблюдение |
|---|---|---|
| Новый запуск | ________ | ________ |
| Навести на «Поймай меня» | ________ | ________ |
| Навести ещё раз | ________ | ________ |
| Нажать «Домой» | ________ | ________ |
| Снова навести на кнопку | ________ | ________ |
| Щёлкнуть по форме | ________ | ________ |
| Сохранить, открыть снова, навести | ________ | ________ |
Сохранение и повторное открытие
- Выполни «Сохранить все», останови приложение и закрой проект.
- Через «Файл → Открыть проект» открой
.pabcprojиз своей папки. - Запусти заново и проверь наведение и «Домой».
- Передай всю исходную папку проекта и личный лист. Один снимок окна не заменяет исходники.
Сохраняй проект целиком и проверяй его после повторного открытия.
Критерии готовности
Шесть диагностических баллов: проект повторно открывается; элементы подписаны верно; MouseEnter перемещает кнопку без обязательного щелчка; кнопка остаётся видимой; «Домой» возвращает её в угол и обновляет статус; в листе есть прогнозы и отличие MouseEnter от Click. Баллы дают обратную связь и не переводятся автоматически в отметку.
Если остаётся время: в MeetName отклони пустое имя; или по упражнению 2 учебника покажи дополнительные надписи через Visible после Enter.
Если результат отличается
| Наблюдение | Что проверить |
|---|---|
| Кнопка уходит за край | Вычисление maxX / maxY с учётом ширины и высоты |
| Реакция только по щелчку | Событие MouseEnter, а не только Click |
| Приветствие на каждую букву | Условие e.KeyChar = #13 |
| Клавиши «не работают» | Фокус на textBox1 |
| После открытия нет реакции | Сохранён ли код; открыт ли свой .pabcproj |
| Enter даёт лишний сигнал | Стоит ли e.Handled := true после проверки #13 |
Объясни самостоятельно
- В MeetName пользователь нажал Enter. Какое событие какого объекта вызвало приветствие? Чем это отличается от
Clickкнопки «Вычислить»? - Почему для «убегающей» кнопки достаточно навести указатель? Какие события соответствуют входу и выходу указателя в HoverZone?
- Ученик щёлкнул по форме и нажимает клавиши. Почему
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.
Поделитесь первым материалом
Рабочий лист, презентация или методичка помогут другим учителям подготовиться к уроку.
Комментарии
Войдите, чтобы оставлять комментарии.
Пока нет комментариев. Будьте первым!