TopPicLogo TopPicText

Перемещение вверх и вниз по ленточной форме как в таблице

Как известно, по умолчанию, в ленточной форме перемещение от записи к записи происходит только после прохождения фокуса через все доступные поля. Дабы производить переход так же как в таблице необходимо:
1.     Для формы установить в свойстве ПЕРЕХВАТ НАЖАТИЯ КЛАВИШ = ДА
2.     На событие КЛАВИША ВНИЗ формы вставить код - Form_KeyDown(...) как показано  

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
On Error GoTo KeyDownERR
'Обработка направления перехода
    Select Case KeyCode
        Case vbKeyUp 'Нажата клавиша ВВЕРХ
            DoCmd.GoToRecord , , acPrevious
        Case vbKeyDown 'Нажата клавиша ВНИЗ
            DoCmd.GoToRecord , , acNext
    End Select
    Exit Sub
KeyDownERR:
    KeyCode = 0
    Err.Clear
End Sub


Вариант посложнее (с ComboBox-ами):
Если в ленточной форме есть ComboBox-ы, то дополнительно необходимо:
     - Добавить в модуль формы переменную - Private bFocusInComboBox As Boolean
     - Обработать событие LostFocus (Потеря Фокуса) для каждого ComboBox-a формы как показано
Все эти сложности с флагами только ради того что бы пользователь мог разворачивать и выбирать значение в КомбоБоксе с клавиатуры.


Private bFocusInComboBox As Boolean 'Флаг присутствия в (возможно) раззвернутом комбобоксе


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'es 25.03.2017
'Литература:
'https://msdn.microsoft.com/en-us/library/aa733630(v=vs.60).aspx
'--------------------------------------------------------------------------
' Внимание!!
' У формы ставим : Me.KeyPreview = True
'--------------------------------------------------------------------------

Dim intAltDown As Integer
Dim ShiftKey%
Dim ctrl As Control

On Error GoTo KeyDownERR
    
'Заглушка - на случай разворачивания списка с клавиатуры : Alt + Down
    ShiftKey = Shift And 7
    If ShiftKey = 4 And KeyCode = vbKeyDown Then
        If Me.ActiveControl.ControlType = acComboBox Then 'И если тек. контроль = КомбоБокс
            bFocusInComboBox = True 'Ставим флаг отбоя
            'Debug.Print "Alt + Down in " & Me.ActiveControl.Name
        End If
    End If

    If bFocusInComboBox = True Then Exit Sub

'Обработка направления перехода
    Select Case KeyCode
        Case vbKeyUp 'Нажата клавиша ВВЕРХ
            DoCmd.GoToRecord , , acPrevious
        Case vbKeyDown 'Нажата клавиша ВНИЗ
            DoCmd.GoToRecord , , acNext
    End Select
    Exit Sub

KeyDownERR:
    KeyCode = 0
    Err.Clear
End Sub


Private Sub cbComboBoxName_LostFocus()
    bFocusInComboBox = False 'снимаем флаг
End Sub
Назад ToTop
L.E. 07.11.2017
Рейтинг@Mail.ru