Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 9

Программа должна отдельно реагировала на нажатие и отпускание клавиши

05.12.2012, 12:51. Показов 2567. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Я тут начал разбираться с Windows Forms, так вот, возник один вопрос. Есть обработчики событий "KeyDown" и "KeyUp". Вот как можно сделать так, чтобы
а)Программа отдельно реагировала на нажатие и отпускание клавиши.
б)Причем при удержании клавиши не должно генерироваться "10 символов в секунду"(нажал W - зарегистрировалось нажатие W - ничего не происходит - отпустил W - зарегистрировалось отпускание W)?

Ну, вот просто обработчики...
Кликните здесь для просмотра всего текста

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
private: System::Void Form1_KeyPress( Object^ /*sender*/, KeyEventArgs^ e )
         {
             if(e->KeyCode == Keys::W)
                 OutPut->AppendText(Environment::NewLine + "W pressed.");
             if(e->KeyCode == Keys::A)
                 OutPut->AppendText(Environment::NewLine + "A pressed.");
             if(e->KeyCode == Keys::S)
                 OutPut->AppendText(Environment::NewLine + "S pressed.");
             if(e->KeyCode == Keys::D)
                 OutPut->AppendText(Environment::NewLine + "D pressed.");
 
         }
private: System::Void Form1_KeyUp( Object^ /*sender*/, KeyEventArgs^ e )
         {
             if(e->KeyCode == Keys::W)
                 OutPut->AppendText(Environment::NewLine + "W released.");
             if(e->KeyCode == Keys::A)
                 OutPut->AppendText(Environment::NewLine + "A released.");
             if(e->KeyCode == Keys::S)
                 OutPut->AppendText(Environment::NewLine + "S released.");
             if(e->KeyCode == Keys::D)
                 OutPut->AppendText(Environment::NewLine + "D released.");
 
         }


А вот такое вот получается при удержании "W":
Миниатюры
Программа должна отдельно реагировала на нажатие и отпускание клавиши  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2012, 12:51
Ответы с готовыми решениями:

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

кнопка реагировала на нажатие клавиши клавиатуры
как сделать, чтобы кнопка Button нажималась при нажатии определенной клавиши с клавиатуры?

нажатие и отпускание клавиши enter для отправки формы
нажатие и отпускание клавиши enter для отправки формы после submit и коды /1C /9C или 1C 9C. Как это записать правильно?

6
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 9
05.12.2012, 18:14  [ТС]
Никто не знает что-ли? =(
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.12.2012, 18:49
C++
1
2
3
4
5
6
7
8
9
10
static bool isReadyToAdown=true;
private: System::Void Form1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e){
        if(e->KeyCode == Keys::A&&isReadyToAdown){
   this->richTextBox->Text+="\nA down!";
   isReadyToAdown=false;     
        }
    }
private: System::Void Form1_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e){
if(e->KeyCode == Keys::A) isReadyToAdown=true;
}
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 9
07.12.2012, 12:47  [ТС]
Эмм...Все так же мигает.
Насколько я понял алгоритм,
вначале переменная, которая true. Когда клавиша нажата И переменная равна true, то регистрировать нажатие и ставить переменную false.
НО
Каждый раз после нажатия(10 раз в секунду) срабатывает проверка отпускания, которая снова делает переменную true. А потом снова нажатие...
Блин, вот нигде не могу найти подобной ситуации =(
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.12.2012, 13:38
Цитата Сообщение от Vistaern Посмотреть сообщение
Эмм...
Каждый раз после нажатия(10 раз в секунду) срабатывает проверка отпускания, которая снова делает переменную
Работает правильно. Жмём, - держим, - результат: обработано начало нажатия A.
Проверка, как Вы говорите, делает true именно после отпускания. И это правильно. Не хотите же Вы, чтобы обработка нажатия клавиш не происходила для выбранного региона вообще? Вообще, можно по разному, но как бы Вы не отключали обработку события, нужно определить по наступлению какого события его нужно включить.
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 9
07.12.2012, 14:40  [ТС]
Я говорю, что при удержании клавиши 10 раз в секунду генерится KeyDown-KeyUp(Вот как например если в текстовом редакторе клавишу зажать).
Сейчас, разберусь, еще попробую. А то что-то у меня вообще перестали читаться нажатия, даже как вначале было не работает =(
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.12.2012, 15:46
Цитата Сообщение от Vistaern Посмотреть сообщение
Я говорю, что при удержании клавиши 10 раз в секунду генерится KeyDown-KeyUp
Vistaern, почитайте о классе EventHendler и его наследниках. То, что события происходят это нормально. Но мы же отключили реакцию на это событие, то есть оно происходит, а в обработчике ничего не делается (именно по нажатию на A, если Вы заметили, но можно и на другие коды также сделать). Этого же Вы добиваетесь? Или Вы хотите отписаться от KeyDown вообще, по первому нажатию, а по отпусканию (KeyUp) снова подписаться? Зачем такие проблемы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2012, 15:46
Помогаю со студенческими работами здесь

Программа должна ожидать нажатие клавиши и только потом закрываться
Привет всем. Создал маленькую программку для TASM, а она показывает ДОС-окно и сразу исчезает. Хотя прерывание 10h c номером в AL=08h...

Как сделать что бы программа не реагировала на определенные клавиши?
У меня в программе стоит KBDHook, и он ловит все подряд клавиши, в том числе и клавиша NumLock, при нажатии которой чистится label... Хук...

Ввести с клавиатуры строку символов.Признак окончания ввода строки - нажатие клавиши 'ввод'.Программа должна определить длину введенной строки L
Помогите пожалуйста:gbye: Ввести с клавиатуры строку символов.Признак окончания ввода строки - нажатие клавиши 'ввод'.Программа должна...

Нужно, чтобы программа реагировала на заданные клавиши даже когда она свернута
Здравствуйте, у меня такая проблема: нужно, чтобы программа реагировала на заданные клавиши (у меня ctrl+space) даже, когда она свернута....

Как сделать так, чтобы программа реагировала на нажатие кнопок даже когда она свернута?
Всем добрый день! Знаю много раз такое спрашивали, но у меня нечего не получилось, поэтому прошу в гугл не посылать. У меня есть...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru