Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Обработчик нажатия клавиши

27.10.2018, 06:08. Показов 5183. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Во многих источниках можно найти код обработчика события нажатия клавиши.
Например, такой:
C++ Скопировано
1
2
3
4
5
#pragma endregion
private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) 
             {
               button1 -> Text = L"Клавиша нажата"; 
             }
(Visual Studio 2010; проект Windows Forms)
Но у меня он не работает (хотя и ошибку не выдаёт)
Почему?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2018, 06:08
Ответы с готовыми решениями:

Как сделать обработчик нажатия клавиш в приложении с Form?
Мне надо сделать webbrowser->GoBack() при нажатии какой нибудь кнопки(на клавиатуре), я пробовал через GetKeyState() но компилятор...

Эмуляция нажатия левой клавиши мыши
Как это сделать? Пожалуйста, подскажите. (Считая, что курсор уже установлен на нужную позицию, нужно только кликнуть мышью.)

C# обработчик нажатия клавиши
Всем привет! Облазил весь интернет и не смог найти подходящего кода( Нужно чтобы при нажатии на клавишу выполнялось какое-либо действие....

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17896 / 13992 / 5345
Регистрация: 17.03.2014
Сообщений: 28,648
Записей в блоге: 1
27.10.2018, 18:42
LVV, возможно потому что не сделана подписка на событие KeyDown. Подписку можно сделать в дизайнере или кодом
C++ Скопировано
1
this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::Form1_KeyDown);
Добавлено через 58 минут
Если подписка есть, то попробуй установить KeyPreview = true для формы.
2
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
28.10.2018, 13:45  [ТС]
Спасибо. Всё заработало.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#pragma once
 
namespace обработканажатияклавиш {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Сводка для Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(55, 56);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(157, 74);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(282, 253);
            this->Controls->Add(this->button1);
            
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
            this->KeyPreview = true;
            this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::Form1_KeyDown);
            
 
        }
#pragma endregion
        private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) 
             {
               button1 -> Text = L"Клавиша нажата"; 
             }
    
    };
}
Только вот на клавиши управления курсором (стрелки) не реагирует.

(среда Visual Studio 2010; Windows Forms приложение на C++)

Добавлено через 5 минут
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Подписку можно сделать в дизайнере
Это как? Через свойства? И какое же свойство Form1 отвечает за "подписку"?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
28.10.2018, 13:58
Разработчики решили, что стрелки, Табы и прочие управляющие клавиши не должны генерировать событие KeyDown при нажатии. Это связано с множеством функций, которые по-умолчанию привязаны к этим кнопкам (перемещение между контролами, перемещение в меню и т.д.)
Поэтому если абсолютно необходимо обрабатывать эти нажатия, нужно использовать событие PreviewKeyDown или переопределить защищённый метод ProcessCmdKey()
Up, Down, Left and Right arrow keys do not trigger KeyDown event

P.S. Сочетания клавиш, в которых используются стрелки, должны работать с KeyDown как положено.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
28.10.2018, 14:01
Лучший ответ Сообщение было отмечено LVV как решение

Решение

Цитата Сообщение от LVV Посмотреть сообщение
Это как? Через свойства? И какое же свойство Form1 отвечает за "подписку"?

Цитата Сообщение от tezaurismosis Посмотреть сообщение
Щелчок по значку с молнией переключает панели в режим просмотра событий. Справа от имени каждого события указано имя обработчика, если таковой имеется. Чтобы создать отладчик, дважды щёлкните по графе с именем события или впишите нужное вам имя – обработчик автоматически создастся и присоединится к событию.
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
28.10.2018, 16:25  [ТС]
Спасибо. Извините за туповатые вопросы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2018, 16:25
Помогаю со студенческими работами здесь

Обработчик нажатия клавиши
Всем доброго времени суток, возникла небольшая проблема, код не реагирует на нажатие клавиши =( Подскажите в чём проблема =) using...

Собственный обработчик нажатия клавиш <CTRL+С>
Уважаемые форумчане! помоги написать собственный обработчик нажатия клавиш &lt;CTRL+С&gt; пишу в masm32 (link16.exe) буду рад если и в...

Eclipse обработчик нажатия клавиши
Задача состоит в том, как передать параметры из диалогового окна. Есть главная активность с кнопкой, по нажатию которой появляется...

Обработчик нажатия клавиши+щелчок мыши.
Возможно ли написать обработчик для ссылки : чтобы переход осуществлялся после скажем нажатия ctrl. Т.е есть ссылка вида, при нажатии на...

Как корректно реализовать обработчик нажатия клавиши для массива объектов?
Сделал программу движения шарика по нажатию клавиши: Program keyEvent; uses GraphABC, Events; { подключение модулей } ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер