Private Sub Form_KeyPress(KeyAscii As Integer)
If (KeyAscii = 27) Then
MsgBox ("нажали Esc")
End If
End Sub
Перехват сигналов клавиатуры
Ребят, кто-нибудь знает как в excel/vb перехватывать сигналы клавиатуры?
Подробнее:
Уже есть формочка. На ней есть кнопочка.Мне необходимо, чтобы по нажатию enter нажималась эта кнопка, а по нажатию esc форма закрывалась.
Есть соображения?
З.Ы. по поводу визуального васика не знаю точно -- я сишник, но должно быть что-то подобное
а тут?
Код:
правда, если ты хочешь еще нажать и Enter, то этот код тебе уже не поможет.
обработка виндовых сообщений похожа во всех языках программирования под винду. а энтер можно поймать в обработчике KeyDown\KeyUp
точно(ту ересь убрал), в первый раз просто поторопился. Enter ловится аналогично тому как я уже показывал, т.е.
Код:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MsgBox ("нажат Enter")
End If
End Sub
If KeyAscii = 13 Then
MsgBox ("нажат Enter")
End If
End Sub
13 код Enter'а.
можно сделать хук на клаву, но это если тока форма не в фокусе...
Методы, про которые вы говорите я пробовал не помогает.Я про KeyPress/Up/Down. KeyPreview, кстати, нигде не нашел...
Может эти методы необходимо в каком-то специальном месте располагать? В коде формы - не получается...
Если что, то у меня excel 2003
Код:
If KeyAscii = 13 Then
MsgBox ("this is Enter")
End If
MsgBox ("this is Enter")
End If
О! Сделал, как ты говоришь и увидел разницу.Точнее я не все сказал наверное... У меня на форме еще текстбоксы есть. При их наличии не пашет. Даже если сделать то же самое для Box_KeyPress
Спасибо pashulka! Точно, помогло.
Но есть еще и другие клавиши,как: enter, backspase, arrow down - которые мне необходимо использовать для определенный действий.
Как их определить?
Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13: MsgBox "ENTER", , ""
Case 27: MsgBox "ESC", , ""
End Select
End Sub
В других случаях, Вам возможно придётся использовать аналогичное событие, но для каждого элемента управления.
Все было просто. Просто необходимо было обработчик сигналов вставить в событие keydown каждого элемента формы:
Private Sub Cases(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13: Click_Filter
Case vbKeySeparator: Click_Filter
Case 27: Unload Me
Set Form = Nothing
End Select
End Sub
Не получалось, потому что не для всех элементов обработчик был, а при нажатии enter происходил переход на бездействующие элементы.
Ну и для верности отключил на всех элементах все свойства связанные с переходом по нажатию клавиши и фокусировке при клике.
Еще раз спасибо!