99591

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

Контрольная

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

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

Русский

2016-09-25

63.5 KB

2 чел.

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

Программирование реакции приложения на события клавиатуры иногда называют созданием программного обработчика (или просто обработчика) клавиатуры (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


 

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

31691. Мотиваційна сфера особистості. Потяги і бажання. Прагнення особистості. Ризик як вияв активності особистості 81.5 KB
  Здійснюючи цілеспрямовані дії людина зустрічається з різноманітними перешкодами. Тут і оцінка ситуації і вибір шляху для майбутньої дії відбір засобів потрібних для досягнення мети прийняття рішень і т.Якщо в людини відсутня актуальна потреба виконувати дію але при цьому необхідність виконання її вона усвідомлює то воля створює допоміжне спонукання змінюючи смисл дії робить його більш значущим. Довільні та вольові дії включаються в зміст вольової поведінки людини.
31692. Самоосвіта та самовиховання як умова успішної діяльності вчителя 31 KB
  Кількість часу й сил які вчитель витрачає на самоосвіту залежить від його мотивації. Ніхто не сперечатиметься з тезою що якщо вчитель хороший то й рівень знань учнів високий. Працювати над собою вчитель починає ще зі студентської лави. Якщо вчитель не вдосконалює себе не експериментує то перетворюється на ремісника який стоїть за верстатом і робить кожного дня одну й ту ж роботу.
31693. Розвиток і виховання дитини в сім'ї потребує безлічі діяльнісних ситуацій, в яких відбувається формування особистості заданої орієнтації 47 KB
  Головне навантаження щодо забезпечення реального звязку з сімєю лягає на плечі класного керівника. Свою діяльність він організовує через класний батьківський комітет, батьківські збори, а також через вчителів, які працюють в даному класі. Важливою частиною практичної діяльності класного керівника з підтримання контактів
31695. Тактики виховання дітей у сім’ї 27.5 KB
  Вдаючись до такої тактики, батьки намагаються відгородити дитину від життєвих реалій, випробувань, намагаються все вирішувати за неї, задовольняти її потреби і примхи. За таких умов дитина позбавлена змоги формувати в собі необхідні для подальшого життя психологічні, вольові якості, об'єктивно оцінювати себе, свої можливості й інших людей, цілеспрямовано працювати над собою. Усе це деформує її внутрішній світ, систему цінностей, різко занижує або завищує її вимоги до оточення, спонукає до девіантних форм задоволення своїх потреб
31696. Юнацький вік 59 KB
  У звязку з тенденцією до різкого омолодження шлюбу актуальною стає підготовка до одруження молоді. Все це викликає у них незадоволення розчарування невпевненість у собі небажання разом з партнером налагоджувати сімейні взаємини зниження мотивації шлюбу. Наскільки такі знання наприклад роблять молодь готовою до шлюбу [2; 8; 23; 25; 36; 40; 57; 77; 84] Певний вклад у її вивчення унесли М. Одначе недостатньо вивченими залишилися питання змісту структури готовності до шлюбу шляхів поліпшення підготовки молоді до сімейного життя.
31697. Досліджується вплив сімї на формування особистості дітей 58.5 KB
  Досліджується вплив сімї на формування особистості дітей. Психологія вивчає особистісні та соціально-психологічні чинники, що зміцнюють або дестабілізують шлюб. Багато уваги приділяється питанням статево-рольового виховання молоді, формуванню просімейної мотивації, психологічним аспектам сексуальних стосунків, взаємної адаптації шлюбної пари, їхній психологічній сумісності. Чільне місце відводиться дослідженню соціально-психологічних процесів, що відбуваються в сім'ї: сімейна комунікація ті інтеракція, міжособистісна перцепція, рольова диференціація у взаєминах подружжя.
31698. Становлення шлюбно-сімейних відносин 33 KB
  Для багатьох джерел національних правових систем характерним є уникнення законодавчого визначення поняття шлюбу. Договірна концепція шлюбу є найбільш поширеною. Розуміння шлюбу як союзу двох незалежних і рівноправних партнерів Східна Європа в т. Дещо іншим є поняття шлюбу як союзу чоловіка й жінки у мусульманських державах.
31699. Класний керівник. Його роль, місце і значення у формуванні особистості 41 KB
  Історія виникнення посади класного керівника Кожна історична епоха пред'являла свої вимоги до освіти й виховання молодого підростаючого покоління та тих людей які отримали тепер назву класний керівник . Достатньо чіткі функції класного керівника у радянській школі стали визначатися у 30х роках після постанов ЦК ВКП б Про початкову і середню школу 1931 та Про режим у початковій і середній школі 1932 коли була введена класноурочна система навчання систематична перевірка й оцінка знань учнів визначена роль учителя як організатора й...