Запрет на изменение фокуса контролов стрелками клавиатуры - VB
Формулировка задачи:
Кнопки стрелок на клавиатуре используются для других целей - их нажатие анализируется с помощью Form_KeyDown. После добавления контролов кнопок на форму, после нажатия стрелок - только фокус переходит с контрола созданной кнопки на другой контрол. Как сделать чтобы нажатия стрелок не меняло фокус?
Всё правильно работает, но при нажатой Shift (и Ctrl, и Alt). Нужно чтобы было наоборот - переход по контролам стрелками при нажатой Shift, а при отжатой - работа с формой и вводом: перехват стрелок, символов!
Решение задачи: «Запрет на изменение фокуса контролов стрелками клавиатуры»
textual
Листинг программы
Option Explicit Const r = 600, rr = 390 Dim cmb(8, 6) As CommandButton 'Двумерный массив кнопок Dim WithEvents c As CommandButton Dim i&, j& Sub moveFocus(ii&, jj&) 'Перемещение фокуса If ii < 0 Then ii = 0 If ii > UBound(cmb, 1) - 1 Then ii = UBound(cmb, 1) - 1 If jj < 0 Then jj = 0 If jj > UBound(cmb, 2) - 1 Then jj = UBound(cmb, 2) - 1 i = ii: j = jj cmb(i, j).SetFocus End Sub Private Sub c_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 87: moveFocus i, j - 1 Case 83: moveFocus i, j + 1 Case 65: moveFocus i - 1, j Case 68: moveFocus i + 1, j End Select End Sub Private Sub c_LostFocus() On Error Resume Next Set c = ActiveControl End Sub Private Sub Form_Activate() cmb(0, 0).SetFocus c_LostFocus i = 0: j = 0 End Sub Private Sub Form_Load() For i = 0 To UBound(cmb, 1) - 1 For j = 0 To UBound(cmb, 2) - 1 Set cmb(i, j) = Controls.Add("vb.CommandButton", "cmb" & i & j) With cmb(i, j) .Move i * rr + r, j * rr + r, rr, rr .Caption = i & j .Visible = 1 End With Next Next End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д