Как перехватить vbKeyReturn только в VBA Access

У меня есть элемент управления textbox в subForm, который является singleForm. Однако, когда я нажимаю клавишу enter, она добавляет new record, а предыдущая record скрывается. У меня уже установлено form property на current record.

Я использовал приведенный ниже код, чтобы перехватить ключ enter, он работает.

Private Sub txt_1_KeyDown (KeyCode As Intger, Shift as Integer)

Select case KeyCode
    Case vbKeyCode
        KeyCode = 0
        Me.parent.Combo.SetFocus
End Select

End Sub

Однако теперь я не могу добавить new line, используя Ctrl + Enter внутри textbox, так как код срабатывает, как только я нажимаю enter. Может кто-нибудь помочь, как изменить приведенный выше код, чтобы он перехватывал только клавишу enter и сохранял поведение Access по умолчанию, добавляя новую строку при нажатии Ctrl + Enter.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
470
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужно проверить аргумент Shift следующим образом:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = vbKeyReturn Then
      If Not Shift = acCtrlMask Then
         MsgBox "Enter"
         KeyCode = 0
         Me.parent.Combo.SetFocus
      End If
   End If
End Sub

Спасибо за простой совет. Пожалуйста, внесите небольшое исправление в свой код, заменив vbCtrlMask на acCtrlMask. Тогда это работает нормально.

Lone 11.04.2019 01:32

Попробуйте проверить код ключа:

Private Sub txt_1_KeyDown(KeyCode As Intger, Shift as Integer)

    Select Case KeyCode
        Case vbKeyEnter
            KeyCode = 0
            Me.parent.Combo.SetFocus
        Case Else
            ' Leave key code as is.
    End Select

End Sub

Я пытался, но это не сработало. Я нашел ответ @Lee Mac в качестве решения.

Lone 11.04.2019 01:27
Ответ принят как подходящий

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

  • Была нажата клавиша Enter (символ ASCII 13).
  • Аргумент Shift обработчика события равен нулю, что указывает на то, что Ctrl, Shift, Alt не были нажаты вместе с клавишей Enter.

Код может выглядеть примерно так:

Private Sub txt_1_KeyDown(KeyCode As Intger, Shift As Integer)
    If KeyCode = 13 And Shift = 0 Then
        KeyCode = 0
        Me.Parent.Combo.SetFocus
    End If
End Sub

Другие вопросы по теме