Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 19.09.2019
Сообщений: 30

Изменяемые горячие клавиши

22.11.2020, 12:44. Показов 3162. Ответов 5

Студворк — интернет-сервис помощи студентам
Допустим есть некая кнопка Button1 (WinForm) . По ее нажатию необходимо ввести на клавиатуре сочетание клавиш для определенного действия (например CTRL+SHIFT+R). Как это сделать? При попытке такое реализовать я не смог сделать отслеживание ввода с клавиатуры/мыши. В консоли есть функция ReadKey, а насколько мне известно такого в WMF нет. Наверное единственный способ - отслеживать каждую клавишу. Заранее спасибо за помощь
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2020, 12:44
Ответы с готовыми решениями:

Сделать изменяемые горячие клавиши
Доброго времени суток) Помогите пожалуйста сделать изменяемые горячие клавиши, то есть пользователь должен сам выбирать сочетания клавиш...

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

Горячие клавиши
Как использовать горячие клавиши? К примеру я нажал на shift и выполнилось действие f1.enable = false; А вот если нажал на alt то ...

5
 Аватар для VadimTagil
54 / 44 / 11
Регистрация: 15.07.2011
Сообщений: 160
23.11.2020, 10:43
Почему Form.KeyDown к примеру не подходит? Что значит "изменяемые"? И что такое WMF, Windows Media Foundation?
0
0 / 0 / 0
Регистрация: 19.09.2019
Сообщений: 30
23.11.2020, 17:08  [ТС]
1. На сколько я знаю Form.KeyDown отслеживает заданную клавишу. А можно так чтобы само понимало что я нажал?
2. Я ошибся, не WMF а Windows Form
3. Изменяемые - сочетания можно изменять
0
619 / 399 / 187
Регистрация: 28.11.2019
Сообщений: 867
23.11.2020, 18:11
Makabos, вам именно после нажатия кнопки нужно, чтобы ожидание события происходило ? Как пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public Form1()
        {
            InitializeComponent();
            KeyPreview = true;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            KeyDown += FormKeyDown;
        }
 
        private void FormKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.Shift && e.KeyCode == Keys.R)
            {
                MessageBox.Show("Нажали CTRL+SHIFT+R");
                e.SuppressKeyPress = true;
                KeyDown -= FormKeyDown;
            }
        }
При нажатии button1 подписываемся, после того как будет нажато сочетание CTRL+SHIFT+R, что-то делаем и отписываемся.

Добавлено через 5 минут
Если просто на форме какие-то хоткеи нужны, то проще переопределить ProcessCmdKey:
C#
1
2
3
4
5
6
7
8
9
        protected override bool ProcessCmdKey(ref Message msg, Keys e) 
        {
            if (e == (Keys.Control | Keys.Shift | Keys.R)) 
            {
                MessageBox.Show("Нажали CTRL+SHIFT+R");
                return true;
            }
            return base.ProcessCmdKey(ref msg, e);
        }
0
0 / 0 / 0
Регистрация: 19.09.2019
Сообщений: 30
23.11.2020, 18:23  [ТС]
Примерно да. Задумка вообще такая: пользователь нажимает на GUI Button и должен ввести сочетание клавиш для какого-либо действия (такое реализовано в Discord, Ligthshot и даже в Майнкрафте)) После этого сочетание запоминается и сохраняется. Пользователь, также, может изменить его. Вроде-бы просто сделать такое, но у меня пока не получается
0
 Аватар для VadimTagil
54 / 44 / 11
Регистрация: 15.07.2011
Сообщений: 160
23.11.2020, 19:39
Лучший ответ Сообщение было отмечено Makabos как решение

Решение

Form.KeyDown и так отслеживает все клавиши. Вам нужно просто несколько состояний: сочетание клавиш не назначено, сочетание клавиш записывается, сочетание клавиш назначено. Можно прямо экземпляр KeyEventArgs сохранять в переменную на форме на этапе записи и потом сравнивать по свойствам Control,Shift и KeyCode на этапе проверки записанного сочетания клавиш.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2020, 19:39
Помогаю со студенческими работами здесь

Горячие клавиши
Есть форма. На ней 2 панели. Одна для браузера, другая под кнопки. Если сделать так: private void Form1_KeyDown(object sender,...

Горячие клавиши
Добрый день. Появилась необходимость добавить в приложение горячие клавиши, но не простые, а примерно как это сделано в Word/Excel. Это...

Глобальные горячие клавиши
Я использую в своей программе горячие клавиши, и появилась потребность сделать их глобальными, что бы когда я нажал на кнопку даже если...

Горячие клавиши на кнопки
Я так понял, что просто так не получится назначить?? Можно в событии KeyPress. Но там сама форма все перехватывает.. И нужно...

Назначить на кнопку горячие клавиши
Ребята помогите пожалуйста назначить на кнопку горячие клавиши (например Ctrl+Enter). Кнопка выполняет событие. (Простая программа...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru