Розпізнавання натискань клавіш

Розпізнавання натискань клавіш

Ця книга допоможе освоїти інтегроване середовище розробки VBA і навчитися програмувати в VBA з використання об'єктів, їх властивостей, методів і подій. Обговорювані прийоми програмування ілюструються прикладами, які можна відразу ж випробувати на практиці. Отримані знання ви зможете застосувати як для настроювання й удосконалення популярний офісних додатків, включаючи додатки Office XP, так і для створення власних додатків.

Книга розрахована на тих, хто збирається швидко і без зайвих зусиль навчитися програмувати для Windows, використовуючи VBA.

Книга: VBA для чайників

Розпізнавання натискань клавіш

Розпізнавання натискань клавіш

Використовуйте події KeyPress, KeyDown і KeyUp, щоб відповідати на натискання клавіш користувачем. Подія KeyPress зручно використовувати для розпізнавання клавіш зі звичайними "друкувати" символами (літери, числа, знаки пунктуації), коли потрібно обробити інформацію, що вводиться в текстове поле або в поле зі списком. За допомогою цієї події розпізнаються також багато хто з комбінацій типу , а також клавіша . Трохи пізніше я покажу, як перевірити чи змінити надрукований символ за допомогою процедури обробки події KeyPress.

Події KeyDown і KeyUp, навпаки, розпізнають практично будь-яку посилається їм комбінацію клавіш, включаючи викрутаси типу . З цими подіями працювати важче, ніж з KeyPress, але зате вони дозволяють використовувати більш широкий набір поєднань клавіш. Наприклад, можна створити процедуру обробки події KeyDown, яка дозволяє за допомогою комбінацій і > Відповідно зменшувати або збільшувати значення смуги прокрутки, наприклад, на 10.

У розділі 10 ми обговорили основні прийоми, що дозволяють переконатися в тому, що користувач ввів в форму правильні відомості. Тут ми обговоримо ще кілька прийомів.

У разі текстових полів і полів зі списком деякі символи для даних, що вводяться не допускаються. Використовуйте процедуру обробки події KeyPress, щоб прибрати з екрану неприпустимі символи в разі друкування їх користувачем. Наступний програмний код дозволяє вводити тільки букви і цифри:

Private Sub txtSerial Number_KeyPress (ByVal KeyAscii _

'Весь наступний блок є умовою:

If Chr (KeyAscii) <"0" Or _

(Chr (KeyAscii)> "9" And Chr (KeyAscii) <"A") Or _

(Chr (KeyAscii)> "Z" And Chr (KeyAscii) <"a") Or _

Chr (KeyAscii)> "z" Then

MsgBox "Неприпустимий символ!"

KeyAscii = 0 'відкидання символу

Так, я визнаю, що використовується тут умова виявилося досить довгим, але зате воно працює. Як тільки оператор If. Then виявить неприпустимі символи, відображається повідомлення про це. Потім йде оператор KeyAscii = 0; KeyAscii є аргументом процедури обробки події KeyPress, тому він використовується як локальна змінна в даній процедурі. Зміна його значення змінює код символу, що передається в текстове поле. А оскільки саме текстове поле не сприймає символ, який має код 0, надрукований користувачем неприпустимий символ зникне без сліду.

Зміна значення аргументу KeyAscii дозволяє змінювати неправильно введені дані на правильні. Наприклад, таку процедуру обробки події можна використовувати для відображення і збереження вводиться користувачем тексту в вигляді тексту, записаного літерами верхнього регістру:

Private Sub txtSerial Number_KeyPress (ByVal KeyAscii _

Оператор, який здійснює перетворення, зажадав використання трьох функцій, вкладених одна в іншу. Оскільки KeyAscii є числовим кодом символу, спочатку доводиться конвертувати цей код в рядок за допомогою функції Chr, потім перевести рядок у верхній регістр за допомогою UCase і, нарешті, конвертувати рядок знову в ціле число за допомогою Asc.

Якщо ви хочете перевіряти значення елемента управління при кожній зміні, створіть процедуру обробки події або використовуйте готову з попереднього підрозділу. Але іноді краще відкласти перевірку даних до моменту, коли користувач завершить введення повністю. Деякі будуть вдячні вам за можливість без сторонньої допомоги коригувати вводяться ними дані перед тим, як остаточно передати ці дані на перевірку програмі, - це вони сприймають як непряме визнання їх розумових здібностей.

Відкласти перевірку має сенс і в тому випадку, якщо вона займає багато часу. Якщо доведеться порівнювати введені дані з даними з якої-небудь бази даних або даними з Internet, ви, напевно, не захочете змушувати користувача чекати, поки програма буде шукати дані для порівняння після кожного натискання клавіші і кожного клацання кнопки миші.

Щоб перевірити значення елемента управління після того, як користувач закінчить введення повністю, створіть процедуру обробки події BeforeUpDate. Ці події відбуваються, коли користувач клацає на іншому елементі управління, натискає кнопку або натискає комбінацію клавіш, призначену іншого елемента керування. VBA реєструє подія BeforeUpDate безпосередньо перед тим, як покинути даний елемент управління, тут ви і можете скасувати оновлення даних і залишитися на місці, пропонуючи користувачеві виправити помилку. Наступний приклад показує, як використовувати оператор Cancel:

Private Sub txtSerial Number_Change ()

If Len (t xt Serial Number.Value)> 5 Then

MsgBox "Занадто багато символів. Повторіть введення."

Іноді має сенс відкласти перевірку даних елемента керування до того моменту, коли користувач клацне на кнопці ОК, закриває форму. Це доводиться робити тоді, коли критерії перевірки використовують значення декількох елементів управління у формі. Якщо ви вибрали такий тип перевірки, помістіть відповідний програмний код в процедуру обробки події Click кнопки ОК. Припустимо, ви розробляєте форму, яка дозволить користувачеві ввести дати майбутніх важливих подій. У формі є список, в якому користувач може вказати, за який час до настання події потрібно нагадати про нього. Якщо користувач запланує деяку зустріч на завтра, але попросить нагадати про неї за два дні до цього, ви можете повідомити про заборону введення таких даних вже після того, як користувач клацне на кнопці ОК. Таким чином вам не доведеться просити користувача ввести дані в елементи управління в певному порядку, щоб уникнути появи повідомлень про помилку.

Схожі статті