2 / 2 / 2
Регистрация: 18.01.2012
Сообщений: 41

Не обрабатывается нажатие кнопок (стрелок) на клавиатуре

05.02.2016, 17:11. Показов 2606. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел в интернете код для обработки нажатия стрелок на клавиатуре, но он работает только если на форме нету кнопок и текстбоксов. Иначе при нажатии на стрелки обработчик не срабатывает, а стрелками выделяются элементы формы.
Буду очень благодарен за любую помощь.

C#
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
 protected override bool IsInputKey(Keys keyData)
        {
            switch (keyData)
            {
                case Keys.Right:
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                    return true;
                case Keys.Shift | Keys.Right:
                case Keys.Shift | Keys.Left:
                case Keys.Shift | Keys.Up:
                case Keys.Shift | Keys.Down:
                    return true;
            }
            return base.IsInputKey(keyData);
        }
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            switch (e.KeyCode)
            {
                case Keys.Left:
                case Keys.Right:
                case Keys.Up:               
                case Keys.Down:
                    if (e.Shift)
                    {
                        MessageBox.Show("shif+tkeypressed");
                    }
                    else
                    {
                        MessageBox.Show("keypressed");
                    }
                    break;
            }
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2016, 17:11
Ответы с готовыми решениями:

Нажатие кнопок на клавиатуре и запись их в файл
Здравствуйте. Сейчас программа работает добавляя информацию в файл только после её закрытия. Подскажите что можно придумать чтобы...

Не обрабатывается должным образом нажатие клавиш
на форме есть кнопка Button которая должна двигатся при нажатии на стрелки на клавиатуре. при нажатии на клавишу(одну или несколько...

Отловить нажатие стрелок и другое.
Здравствуйте. Хочу сделать игру "танчики", столкнулся с проблемой. На форумах вычитал, что такой код private void...

5
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
05.02.2016, 17:24
Цитата Сообщение от zwer97 Посмотреть сообщение
стрелками выделяются элементы формы.
Установите для этих элементов TabStop = false.
0
2 / 2 / 2
Регистрация: 18.01.2012
Сообщений: 41
05.02.2016, 17:24  [ТС]
P.S. Если на кнопках ставлю свойство TabStop = false, то обрабтчик нажатия "стрелок" работает, но только до первого нажатия кнопки. Потом она выделяеться и стрелки только переключают выделение между кнопками.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
05.02.2016, 17:30
Цитата Сообщение от zwer97 Посмотреть сообщение
Потом она выделяеться
В конце обработчика щелчка по кнопке переводите фокус на какой-либо другой элемент. Например,
C#
1
textBox1.Focus();
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
05.02.2016, 17:47
Лучший ответ Сообщение было отмечено zwer97 как решение

Решение

Цитата Сообщение от zwer97 Посмотреть сообщение
код для обработки нажатия стрелок на клавиатуре
C#
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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication327
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var bt1 = new Button { Parent = this};
            var bt2 = new Button { Parent = this , Left = 100};
        }
 
        const int WM_KEYDOWN = 0x100;
 
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if ((msg.Msg == WM_KEYDOWN))
            {
                switch (keyData)
                {
                    case Keys.Down:
                    case Keys.Up:
                    case Keys.Left:
                    case Keys.Right:
                        Console.WriteLine(keyData);
                        return true;
                }
            }
 
            return base.ProcessCmdKey(ref msg, keyData);
        }
    }
}
1
2 / 2 / 2
Регистрация: 18.01.2012
Сообщений: 41
05.02.2016, 18:02  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
В конце обработчика щелчка по кнопке переводите фокус на какой-либо другой элемент.
Не работат, все равно начинает выделять кнопки.

Storm23, спасибо, так работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.02.2016, 18:02
Помогаю со студенческими работами здесь

Как определить нажатие стрелок?
Добрый день, написал код: private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar ==...

TButton - нажатие кнопок на форме при нажатии стрелок на клавиатуре
Подскажите пожалуйста, мне нужно что-бы при нажатии стрелок на клавиатуре нажимались кнопки на форме. Ставлю Keypriview = true на форме...

Проверка на нажатие стрелок на клавиатуре
есть такая конструкция void func() { char login = {NULL}; login = _getch(); } нужно сдалать проверку на ввод...

Как заставить Check и Radio кнопки обрабатывать нажатие стрелок на клавиатуре
На диалоговом окне размещены несколько стандартных элементов: Edit, Check и Radio Button. Хотелось бы, чтоб при нажатии стрелок вверх и...

Имитировать нажатие кнопок на клавиатуре
Всем привет . Нужно было написать софтину которая будет в приложении эмитировать нажатие кнопак на клавиатуре но программа и приложение...


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

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

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru