99591

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

Контрольная

Информатика, кибернетика и программирование

Эти события следует использовать для определения состояний которые не может определить событие KeyPress а именно: – Специальные комбинации клавиш Shift Ctrl и Alt – Нажатие клавиш со стрелками. Чтобы определить в каком регистре нажата клавиша А эти события используют параметр shift. Заметим что 1 на основной клавиатуре и 1 на дополнительной цифровой клавиатуре возвращаются как разные клавиши хотя они генерируют один и тот же символ – Параметр shift. Указывает состояние клавиш Shift CtrI и Alt...

Русский

2016-09-25

63.5 KB

1 чел.

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

Программирование реакции приложения на события клавиатуры иногда называют созданием программного обработчика (или просто обработчика) клавиатуры (keyboard handler) Обработчик клавиатуры может работать на двух уровнях: на уровне элемента управления и на уровне формы. Обработчик уровня элемента управления (обработчик нижнего уровня) позволяет программировать конкретный элемент управления. Например, можно преобразовать весь набранный в текстовом поле текст в прописные буквы. Обработчик уровня формы позволяет, чтобы форма первой реагировала на события клавиатуры. Затем фокус может быть перемещен на элемент управления или элементы управления на форме, и события могут быть либо повторены, либо инициированы.

С помощью этих событий клавиатуры можно писать код обработки большинства клавиш стандартной клавиатуры.

Обработчик клавиатуры нижнего уровня

Visual Basic предоставляет три события, которые распознаются формами и элементами управления, допускающими ввод с клавиатуры. Они представлены –в таблице 3.

Таблица 3. События клавиатуры

Событие клавиатуры

Происходит

KeyPress

Нажата клавиша, соответствующая символу ASCII

KeyDown

Нажата любая клавиша на клавиатуре

KeyUp

Отпущена любая клавиша на клавиатуре

Только объект, имеющий фокус, может получить событие клавиатуры. Для этих событий форма имеет фокус, только если она активна и ни один элемент управления на ней не имеет фокус. Это может произойти только для пустой формы или для формы, на которой все элементы управления недоступны. Однако, если свойство KeyPreview формы установлено равным True, форма получает все события клавиатуры для каждого элемента управления на форме до того, как элемент управления распознает его. Это особенно полезно, если требуется выполнить одинаковое действие при нажатии любой клавиши, вне зависимости от того, какой элемент управления имеет фокус в данный момент.

События KeyDown и КеуUр предоставляют отклик самого нижнего уровня на события клавиатуры. Эти события следует использовать для определения состояний, которые не может определить событие KeyPress, а именно:

– Специальные комбинации клавиш <Shift>, <Ctrl> и <Alt>

– Нажатие клавиш со стрелками. Заметим, что некоторые элементы управления (кнопки управления, переключатели и флажки) не получают событий при нажатии таких клавиш: их нажатие приводит к перемещению на следующий элемент управления

– Нажатие клавиш <PageUp> и <PageDown>

– Распознавание нажатия цифровых клавиш на вспомогательной цифровой клавиатуре и на основной клавиатуре

– Реагирование как на нажатие, так и на отпуск клавиши (событие KeyPress отвечает только на нажатие)

– Нажатие функциональных клавиш, не связанных с командами меню

События клавиатуры не являются взаимоисключающими. Если пользователь нажимает клавишу, генерируются события KeyDown и KeyPress, за которыми следует событие КеуUр, когда пользователь отпускает клавишу. Если пользователь нажимает одну из клавиш, которую не распознает событие KeyPress, происходит только событие KeyDown, за которым следует событие KеуUр.

Перед тем как использовать события KеуUр и KeyDown, следует убедиться, что события KeyPress недостаточно. Это событие распознает нажатие клавиш, которые соответствуют символам ASCII: буквы, цифры и знаки препинания на стандартной клавиатуре, а также клавиши <Enter>, <Tab> и <Backspace>. Обычно событие KeyPress запрограммировать легче.

Событие KeyPress

Событие KeyPress происходит, когда нажата любая клавиша, соответствующая символу ASCII. Набор символов ASCII представляет не только буквы, цифры и знаки препинания на стандартной клавиатуре, но также и большинство клавиш управления. Однако событие KeyPress распознает только клавиши <Enter>, <Tab> и <Backspace>. Другие функциональные клавиши, клавиши редактирования и клавиши перемещения можно распознать событиями KeyDown и KeyUp.

Следует использовать событие KeyPress, если необходимо обрабатывать стандартные символы ASCII. Например, чтобы перевести все символы в текстовом поле в символы верхнего регистра, следует использовать это событие для изменения регистра символов при их вводе:

Private Sub Text1_KeyPress(KeyAscii As Integer)

KeyAscii = Asc(UCase(Chr(KeyAscii)))

End Sub

Параметр KeyAscii возвращает целое значение, соответствующее ASCII коду символа. Представленная выше процедура использует функцию Chr для преобразования кода символа ASCII в соответствующий символ, функцию UCase для перевода символа в верхний регистр и функцию Asc для преобразования результата обратно в код символа.

Используя ASCII коды символов, можно проверить, нажата ли клавиша, распознаваемая событием KeyPress. Например, следующая процедура определяет, нажата ли клавиша <Backspace>:

Private Sub Text1_KeyPress(KeyAscii As Integer)

   If KeyAscii = 8 Then MsgBox "You pressed theBACKSPACE key."

End Sub

Также можно использовать константы Visual Basic для кодов клавиш вместо кодов символов. В приведенном примере клавиша <Backspace> имеет ASCII значение 8. В Visual Basic для этой клавиши зарезервирована константа vbKeyBack.

События KeyDown и KeyUp

События KeyDown и KeyUp сообщают точное физическое состояние самой клавиатуры: клавиша нажата (событие KeyDown) и клавиша отпущена (событие KeyUp). Событие KeyPress не сообщает непосредственно состояние клавиатуры – оно не распознает состояния нажатия и отпуска клавиши, а просто поставляет соответствующий символ.

Следующий пример иллюстрирует различия. Когда пользователь набирает на клавиатуре прописное <А>, событие KeyDown получает ASCII код для символа "А". Это событие получает тот же самый код, если пользователь набирает строчную букву <а>. Чтобы определить, в каком регистре нажата клавиша <А>, эти события используют параметр shift. Событие KeyPress рассматривает одну и ту же букву в верхнем и нижнем регистре как два различных символа ASCII.

События KeyDown и KeyUp возвращают информацию о нажатом символе при помощи двух параметров:

– Параметр KeyCode. Указывает нажатую клавишу. В этом случае <А> и <а> являются одной и той же клавишей. Они имеют одинаковое значение параметра KeyCode. Заметим, что "1" на основной клавиатуре и "1" на дополнительной цифровой клавиатуре возвращаются как разные клавиши, хотя они генерируют один и тот же символ

– Параметр shift. Указывает состояние клавиш <Shift>, <CtrI> и <Alt>. Только анализируя этот параметр, можно определить, в каком регистре была набрана буква.

Параметр KeyCode

Параметр KeyCode идентифицирует клавишу по ее ASCII значению или константе кода клавиши. Коды клавиш, соответствующих буквам, являются такими же, что и ASCII коды символов букв верхнего регистра. Следовательно, значением параметра KeyCode для <А> и <а> является значение, возвращаемое функцией Asc("A"). В следующем примере используется событие KeyDown для определения, была ли нажата клавиша <А>:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

   If KeyCode = vbKeyA Then MsgBox "You pressed the A key."

End Sub

Нажатие комбинации клавиш <Shift>+<A> или просто <А> без <Shift> отображает сообщение, т.е. в каждом случае параметр правильный. Чтобы определить, была ли нажата буква в верхнем или нижнем регистре, следует использовать параметр shift.

Коды клавиш для цифр и знаков препинания такие же, что и ASCII код цифры на клавише. Поэтому для "1" и "!" значение параметра KeyCode равно значению, возвращаемому функцией Asc('1"). Как и раньше, чтобы проверить, набирался ли символ "!", следует использовать параметр shift.

События KeyDown и KеуUр распознают большинство клавиш управления стандартной клавиатуры. Это функциональные клавиши (<F1>—<F16>), клавиши редактирования (<Delet>, <BackSpace> и т.д.), клавиши перемещения (<Right>, <Left>, <Up> и <DownArrow>) и клавиши дополнительной клавиатуры. Эти клавиши можно проверить, используя или константу кода клавиши или эквивалентное ASCII значение. Например:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

   If KeyCode = vbKeyA Then MsgBox "You pressed the HOME key."

End Sub

Параметр Shift

События клавиш используют параметр shift точно так же, как и события мыши – как целые значения или константы, которые представляют клавиши <Shift>, <Ctrl> и <Alt>. Параметр shift можно использовать вместе с событиями KeyDown и KеуUр, чтобы различать символы верхнего и нижнего регистров или проверять состояния мыши.

В следующем примере параметр shift позволяет определить, в каком регистре была нажата буква:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

   If KeyCode = vbKeyA And Shift = 1_

   Then MsgBox "You pressed the uppercase A key."

End Sub

Как и события мыши, события KеуUр и KeyDown распознают нажатие клавиш <Shift>, <Ctrl> и <Alt> или их комбинации. В следующем примере проверяются специфические состояния клавиш смешения.

Откроем новый проект и добавим переменную ShiftKey в секцию Declarations формы:

Dim ShiftKey as Integer

Добавим текстовое поле к форме и следующую процедуру в событие KeyDown:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

   ShiftKey = Shift

   Select Case ShiftKey

       Case 1 ' или vbShiftMask

           Print "You pressed the SHIFT key."

       Case 2 ' или vbShiftMask

           Print "You pressed the CTRL key."

       Case 4 ' или vbShiftMask

           Print "You pressed the ALT key."

       Case 3

           Print "You pressed the SHIFT and CTRL."

       Case 5

           Print "You pressed the SHIFT and ALT."

       Case 6

           Print "You pressed the CTRL and ALT."

       Case 7

           Print "You pressed the SHIFT, CTRL, and ALT."

      End Select

End Sub

Если текстовое поле имеет фокус, нажатие каждой клавиши или комбинации клавиш генерирует соответствующее сообщение на форме.

Обработчики клавиатуры уровня формы

Каждое событие KeyDown и КеуUр присоединено к конкретному объекту. Чтобы написать обработчик клавиатуры, который применим ко всем объектам на форме, следует установить значение свойства KeyPreview формы равным True. Если это свойство установлено равным True, форма распознает события KeyPress, KeyUp и KeyDown для всех элементов управления на форме до того, как их распознают сами элементы управления. Это позволяет легко предоставить общий ответ на определенное нажатие клавиш.

Можно установить свойство KeyPreview формы равным True в окне Properties или в процедуре Form_Load:

Private Sub Form_Load()

   Form1.KeyPreview = True

End Sub

Можно проверять состояния клавиш, объявляя переменную ShiftKey и используя оператор Select Case. Следующая процедура будет печатать сообщение на форме независимо от того, какой элемент управления имеет фокус.

Откроем новый проект и добавим переменную ShiftKey в секцию Declarations формы:

Dim ShiftKey as Integer

Добавим текстовое поле и кнопку управления на форму. Добавим следующую процедуру к событию KeyDown формы:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

   ShiftKey = Shift

   Select Case ShiftKey

       Case 1 ' или vbShiftMask

           Print "You pressed the SHIFT key."

       Case 2 ' или vbShiftMask

           Print "You pressed the CTRL key."

       Case 4 ' или vbShiftMask

           Print "You pressed the ALT key."

   End Select

End Sub

Если свойство Keypreview формы установлено равным True, форма распознает события клавиатуры раньше элементов управления, но эти события все же происходят для элементов управления. Чтобы предотвратить такое поведение, следует установить параметры KeyAscii и KeyCode процедур обработки событий клавиш для формы равными 0. Например, если на форме нет кнопки по умолчанию, можно использовать клавишу <Enter> для перемещения фокуса между элементами управления:

Private Sub Form_KeyPress(KeyAscii As Integer)

Dim NextTabIndex As Integer, i As Integer

   If KeyAscii = 13 Then

       If Screen.ActiveControl.TabIndex = Count - 1 Then

           NextTabIndex = 0

       Else

           NextTabIndex = Screen.ActiveControl.TabIndex + 1

       End If

       For i = 0 To Count - 1

           If Me.Controls(i).TabIndex = NextTabIndex Then

               Me.Controls(i).SetFocus

               Exit For

           End If

       Next i

       KeyAscii = 0

   End If

End Sub

Так как этот код обнуляет параметр KeyAscii, если он равен 13, элементы управления никогда не распознают, что нажата клавиша <Еntег>, и их процедуры обработки событий клавиш никогда не будут вызваны.

PAGE   \* MERGEFORMAT 2


 

А также другие работы, которые могут Вас заинтересовать

28959. СССР в условиях начавшейся II-ой мировой войны. Военные события конца 1939-1940 гг. и их современная оценка 42 KB
  СССР в условиях начавшейся IIой мировой войны. СССР объявил о своём нейтралитете. СССР и Германия подписали договор о дружбе и границе. СССР потребовал перенести границу от Ленинграда на 70 км.
28960. Начальный этап Великой Отечественной войны: причины неудач 94.5 KB
  Внешняя политика СССР в годы второй мировой войны. немецким военным командованием был разработан план молниеносной войны против СССР план Барбаросса . Захват Польши позволил фашистской армии создать плацдарм для нападения на Советский Союз на западных границах СССР оккупация Норвегии на северных Балканских стран – на южных. Немецкой армии вторжения в приграничных военных округах СССР противостояли 170 дивизий насчитывавших 29 млн.
28961. СССР в послевоенный период. «Холодная война» и ее сущность 40.5 KB
  СССР в послевоенный период. ряд партийных руководителей ранее когдалибо работавших в Ленинграде были обвинены в попытке разрушить Советский союз противопоставив Россию СССР а Ленинград Москве. Внешняя политика Советского государства в первом послевоенном десятилетии Возросший после II мировой войны авторитет СССР базировался на военной мощи Советского государства и признательности европейских народов за освобождение от фашизма. дипломатические отношения с СССР поддерживали 26 стран то в 1945 г.
28962. Хрущевская «оттепель». Попытки осуществления политических и экономических реформ 31.5 KB
  После смерти Сталина в результате борьбы за власть в 1957 году Председателем Совета Министров был избран Н. Период после смерти Сталина и правления Н. После его смерти руководство КПСС предпринимало попытки по разоблачению преступлений сталинского периода. Но всё же впервые открыто о преступлениях сталинского периода было объявлено на ХХ съезде КПСС февраль 1956г.
28963. СССР в 70-80-е годы XX в. Нарастание кризисных явлений в обществе 31.5 KB
  СССР в 7080е годы XX в. Советская экономика всё больше отставала от экономики развитых стран по техническому и технологическому уровню показателям эффективности и что более важно СССР утрачивал преимущества в темпах экономического роста. По этому показателю СССР отставал не только от ведущих западных стран но и от новых индустриальных стран Южной Кореи Тайваня на десятилетия. Чтобы покупать новейшие технологии и продовольствие СССР вынужден был всё больше сырья поставлять на экспорт.
28964. Политика перестройки, замыслы и результаты 40 KB
  Попрежнему формально высшим органом власти был двухпалатный Верховный Совет СССР регулярно собиравшийся на свои сессии на которых он утверждал решения партии и правительства. 12я внеочередная сессия Верховного Совета СССР приняла закон €œОб изменениях и дополнениях Конституции Основному Закону СССР€ содержанием которого было изменение избирательной системы в СССР принципов выборности народных депутатов СССР и принципов функционирования государственных органов. были проведены выборы народных депутатов СССР а весной 1990 г. Всего...
28965. События 1991, распад СССР, образование СНГ и выбор Россией нового исторического пути 37 KB
  Процесс затягивается4 8 декабря Беловежское соглашение Ельцын Кравчук Шушкевич : СССР прекращает существование Россия Украина и Белоруссия объединяются в СНГ. 5 21 декабря АлмаАтинская встреча лидерорв 9 республик Декларация о прекращении существования СССР и о принципах деятельности СНГ.До конца 1991 к СНГ присоединились Молдова и Азербайджан всего в СНГ 11 государств 15 минут 3 прибалтийские республики6 Горбачев сложил свои полномочия.
28966. Россия на пути социально-экономической модернизации. Октябрьские события 1993, завершающий этап ликвидации советской власти 30.5 KB
  явились следствием противостояния законодательной и исполнительной ветвей власти Российской Федерации. Ельцин издал указ О поэтапной конституционной реформе в Российской Федерации в соответствии с которым Верховный Совет и Съезд народных депутатов прекращали свою деятельность. Конституционный суд РФ пришел к заключению о несоответствии данного указа российской Конституции однако Ельцин его не отменил. В 1994 арестованные участники этих драматических событий были амнистированы Государственной думой Российской Федерации.
28967. Принятие конституции РФ 1993г. Качественные изменения социально политической жизни страны 36.5 KB
  Качественные изменения социально политической жизни страны Работа Конституционной комиссии Необходимость принятия новой Конституции была осознана всеми политическими силами еще в ходе принятия Декларации о государственном суверенитете от 12 июня 1990 г. Поначалу работа комиссии проходила довольно быстро и уже через четыре месяца проект новой Конституции был не только подготовлен но и опубликован для всеобщего обсуждения. Седьмой съезд постановил вынести основные положения проекта новой Конституции на всероссийский референдум но восьмой...