Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
Доброго времени суток.
Подскажите, пожалуйста, как обработать событие "нажатие клавиши" на форме. В смысле, хочется, чтобы отлавливать реакцию только на определенные клавиши, а остальные работали бы так, словно их ничто не перехватывает.
Сейчас делаю примерно так:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case Shift
Case 1 'Shift Key Down
Select Case KeyCode
...
End Select
Case 2 'Ctrl Key Down
Select Case KeyCode
...
Case vbKeyF4
DoCmd.Close acForm, Me.Name 'вот здесь приходится вставлять код,
'который дублирует стандартную реакцию на нажатие кнопки.
Case vbKeyP
Call Другая_подпрограмма
End Select
Case 4 'Alt Key Down
Select Case KeyCode
...
End Select
Case Else
Select Case KeyCode
...
End Select
End Select
KeyCode = 0
End Sub

А как сделать так, чтобы не перечислять стандартные сочетания клавиш в Case?
24 сен 04, 18:25    [986567]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
sasha_1
Member

Откуда: Санкт-Петербург
Сообщений: 1640
имхо, достаточно их не перечислять и всё.
24 сен 04, 18:57    [986634]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
Не-а. Ежели не перечисляю, то просто на них никак не реагирует.
24 сен 04, 20:13    [986766]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Dmyttro
Не-а. Ежели не перечисляю, то просто на них никак не реагирует.

Если не реагирует, значит выполняется KeyCode = 0. Надо, чтобы не выполнялось. Например:

case else
exit sub
24 сен 04, 20:16    [986768]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
2 Владимир Саныч
Если убираю KeyCode = 0, то картина становится интересной. Допустим, хочу, чтобы при сочетании Ctrl+P открывался соответствующий отчет. Так вот при отсутствующем KeyCode = 0 он не только открывается. но и сразу появляется диалог печати. т.е., насколько я понимаю, Access воспринимает нажатие и как того хочу я, и как стандатрное событие сразу (в смысле последовательно)?
24 сен 04, 20:25    [986778]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Dmyttro
т.е., насколько я понимаю, Access воспринимает нажатие и как того хочу я, и как стандатрное событие сразу (в смысле последовательно)?

Совершенно верно. Аксесс сначала исполняет то, что написано в процедуре обработчика, а потом то, что он хочет делать сам. Чтобы отменить второе, пишется KeyCode = 0 (разумеется, только для тех клавиш, для которых надо).
24 сен 04, 20:55    [986820]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
Т.е. если я в конце каждого case (после вызова определенных действий) напишу KeyCode = 0, это будет гуд? Попробовал, вроде как работает.
24 сен 04, 21:06    [986842]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Работает - значит хорошо. Но я имел в виду по-другому.

select case keycode
case ...
case ...
case else
exit sub

end select
keycode=0

Красное - это то, что я предложил добавить (см. мой пост от 20:16). Остальное в программе уже есть.
24 сен 04, 21:09    [986845]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
Спасибо, как раз самое оно.
24 сен 04, 21:36    [986875]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
Владимир Саныч, выручай.
Хоть, как говорится, кто старое помянет (в смысле, старый топик)...
Тем не менее, только сегодня понял, что что-то не так. Все вроде было бы нормально, но есть одно но. Когда при помощи tab перехожу на кнопку и нажимаю Enter, то выполняется действие совсем не то, что мне нужно. Ежели же нажимаю эту кнопку мышью, все ОК. Что еще в коде я пропустил?
28 сен 04, 16:14    [993720]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Dmyttro
Member

Откуда:
Сообщений: 93
2 All
Уважаемые, хоть вопрос, конечно, в-основном, к Санычу, но это не значит, что чьи-либо умные мысли по поводу останутся незамеченными - буду премного благодарен.
Код весь как на ладони в постах выше, вопрос - в предыдущем моем посте. Я так понимаю, что надо вставиь какую-то реакцию на VbKeyReturn. Но какую?
28 сен 04, 16:43    [993849]     Ответить | Цитировать Сообщить модератору
 Re: Перехват нажатия клавиш в форме  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Dmyttro
Я так понимаю, что надо вставиь какую-то реакцию на VbKeyReturn. Но какую?

Полагаю, keycode=0
28 сен 04, 20:51    [994446]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить