MyTetra Share
Делитесь знаниями!
Перемещение вверх и вниз по ленточной клавишами управления курсором
19.07.2018
06:57
Раздел: VBA - Access - msa.polarcom.ru - 06 Формы Подчиненные


Перемещение вверх и вниз по ленточной клавишами управления курсором

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

Private Sub Form_Load()

Me.KeyPreview=True 'Перехват нажатия клавиш.

End Sub




2.
На событие КЛАВИША ВНИЗ Form_KeyDown() формы вставить код:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

On Error GoTo KeyDownERR

'Обработка направления перехода

Select Case KeyCode

Case vbKeyUp 'Нажата клавиша ВВЕРХ

Me.Recordset.MovePrevious

'Или так:

'Me.Recordset.Move -1

Case vbKeyDown 'Нажата клавиша ВНИЗ

Me.Recordset.MoveNext

'Или так:

'Me.Recordset.Move 1

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 - 10.12.2017 LE

' Перемещение по записям как в таблице (клавишами управления курсором )

' с учётом случая разворачивания поля со списком с клавиатуры : Alt + Down

'--------------------------------------------------------------------------

'Литература:

' 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 'Нажата клавиша ВВЕРХ

Me.Recordset.MovePrevious

Case vbKeyDown 'Нажата клавиша ВНИЗ

Me.Recordset.MoveNext

End Select

Exit Sub


KeyDownERR:

KeyCode = 0

Err.Clear

End Sub




Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования