0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 11

Запрет на изменение фокуса контролов стрелками клавиатуры

13.07.2016, 10:52. Показов 1899. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кнопки стрелок на клавиатуре используются для других целей - их нажатие анализируется с помощью Form_KeyDown. После добавления контролов кнопок на форму, после нажатия стрелок - только фокус переходит с контрола созданной кнопки на другой контрол. Как сделать чтобы нажатия стрелок не меняло фокус?

Добавлено через 11 часов 51 минуту
Всё правильно работает, но при нажатой Shift (и Ctrl, и Alt). Нужно чтобы было наоборот - переход по контролам стрелками при нажатой Shift, а при отжатой - работа с формой и вводом: перехват стрелок, символов!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2016, 10:52
Ответы с готовыми решениями:

Автоматическое изменение раскладки клавиатуры при получении/снятии фокуса с поля ввода
Уважаемые подскажите пожалуйста ,возможно ли сделать ,если да, то как ?! При фокусе на поле -автоматически раскладка клавиатуры...

Запрет на получение фокуса в Edit и Combobox
Есть Editы и Comboboxы, как прогпрамно разрешать и запрещать им получение фокуса? Простой Enabled:=false; меняет цвета текста и фона на...

Запрет переключения фокуса при создании окна
создаю окно так: var wind = window.open('http://'+arrurl, name, "top=100, left=30, height=100, width=100"); закрываю его так: ...

6
Заблокирован
16.07.2016, 11:54
Немного призадумался, что за контрол? Кто сможет, объясните — пожалуйста.

По смыслу (контексту) вопроса могу только догадываться, что автор не знает про особенности — Menu Editor?

В терминологии Visual Basic вся группа объектов в форме называется набором Controls (Средства управления). Набор Controls (Средства управления) создаётся автоматически и пополняется при добавлении объектов на форму.

Что же хочет узнать Перрен?
Миниатюры
Запрет на изменение фокуса контролов стрелками клавиатуры  
1
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 11
16.07.2016, 18:21  [ТС]
На форме нарисована сетка, внизу контролы CommandButton. Когда не было контролов, нажатия стрелок на клавиатуре перехватывались и можно было "перемещаться" по клеткам сетки. После добавления кнопок - стрелки на клавиатуре перемещают фокус по контролам! Теперь усекли вопрос?)
Миниатюры
Запрет на изменение фокуса контролов стрелками клавиатуры  
0
Заблокирован
16.07.2016, 22:31
Цитата Сообщение от Перрен Посмотреть сообщение
После добавления кнопок - стрелки на клавиатуре перемещают фокус по контролам! Теперь усекли вопрос?)
Перрен!
Считайте меня деревенщиной (из деревни, аула, кишлака). Пишите, пожалуйста, проще, будет понятней. Например, вместо "некоего контрол" (?): элемент управления или просто кнопка.
Вроде увлекаюсь русским языком с детства, но под расстрелом не угадаю: какое именно "семантическое поле" Вы подразумеваете. В голове мысли: бырда-мырда или же мырда-бырда. Совсем тупик.

Этих команд управления в самом наборе Controls — уйма, мне так кажется (никто не пытался подсчитать).

Например, обычное дело — ниже.
Дважды кликаю ЛКМ по кнопке "Условия". Потом выбираю для неё "LostFocus".
Далее указываю, что заблагорассудится! Смотрите картинки.
Миниатюры
Запрет на изменение фокуса контролов стрелками клавиатуры   Запрет на изменение фокуса контролов стрелками клавиатуры  
1
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 11
16.07.2016, 23:28  [ТС]
Infinity20_5!
Надеюсь вопрос будет всё-таки прочитан!
Всё правильно работает, но при нажатой Shift (и Ctrl, и Alt). Нужно чтобы было наоборот - переход по кнопкам Новое-Условие-Решение стрелками клавиатуры при нажатой Shift, а при отжатой - работа с формой и вводом: перехват нажатия стрелок на клавиатуре, символов уже прописанной процедурой для Form_KeyDown.
Что должно заблогарассудиться после выбора "LostFocus"?)
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.07.2016, 03:42
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
Что же хочет узнать Перрен?
То что ты показываешь в картинках. совершенно не относиться к перемещению фокуса
это область редактирования меню тоесть меню, субменю, уровень вверх-вниз и тд
я же тебе скидывал литру найди где там меню редактируется ...

ближе к теме:
Перрен, А почему бы не использовать вместо стрелок, которые в рантайме не показывают код
использовать другие клавиши:
W-Вверх
S-Вниз
A-Влево
D-Вправо

Вот пример для пустой формы на которой формируется
двумерный массив кнопок (ну к примеру 8x6)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
1
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 11
17.07.2016, 06:10  [ТС]
fever brain, спасибо, код работает! Удобная и мощная вещь - программное создание массива кнопок.
Но! Я пришёл к тому, что для моей (задумано глобальной))) задачи удобнее использовать даже не массив кнопок, не FlexGrid, и не PictureBox - поскольку ячеек может быть очень много (>256) и в дальнейшем необходимо изменять цвет, границы ячеек, соединять их линиями и т.д., сетка масштабируется при изменении размеров формы. Основная, первоначальная задача программы - перехват нажатия клавиш (в том числе символов W, S, A, D), печатать символов в соответствующих местах ("ячекейках" рисунка) на форме.
Очень неудобно "перемещаться" по сетке при нажатой Shift и вводить символы - символов вводится иногда довольно много - то есть Shift + (стрелка), отжатие Shift, (ввод символа) - и так раз за разом!
Пока ни к чему лучшему не пришёл, как добавление на форму "невидимой" PictureBox с TabIndex=0. Тогда не нужно использовать Shift - первоначально фокус на форме (невидимой картинке) - и нажатые клавиши перехватываются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2016, 06:10
Помогаю со студенческими работами здесь

Управление стрелками клавиатуры
Нужно присвоить действия при нажатии стрелок на клавиатуре. Пояснения Unity не смог понять. Подскажите на примере, пожалуйста. Игра 2D

Движение картинки стрелками клавиатуры
Добрый день. Написал код, чтобы двигать шарик с помощью стрелок. Теперь хочется вместо шарика вставить какую-нибудь картинку(человечка,...

Перемещение фигуры стрелками клавиатуры
Есть pictureBox. По нажатию клавиш клавиатуры(стрелок) PictureBox должен начинать и менять направление движения, а по другой...

Перемещение объекта стрелками клавиатуры
допустим, есть у меня прямоугольник (rectangleabc) . он чёрного цвета. нажимаю я клавишу вверх (Vk_Up) и прямоугольник движется вверх, а...

Перемещение созданой фигуры стрелками клавиатуры
Всем добрый день! В программировании я не силен, но нужно создать программу для курсовой работы. С первой разобрался а вот вторую уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru