Как связать кнопку приложения с клавишей клавиатуры?
Например, кнопка 1
Нужно, чтобы если я нажал на клавиатуре 1 - то кнопка с надписью 1 сработала бы словно ее нажали мышкой
Код:
::PostMessage(this->GetSafeHwnd(), WM_COMMAND, IDC_BUTTON1 | (BN_CLICKED << 16), (LPARAM)GetDlgItem(IDC_BUTTON1)->GetSafeHwnd());
На С# пытаюсь работать..
Цитата: Bazilisk
Извиняюсь за глупость природную, но нельзя ли как в Маковском Xcode в меню кнопки программы просто задать связанную с этой кнопкой кнопку клавиатуры?
Можно сделать так: устанавливаем свойство KeyPreview формы в True (таким образом форма будет перехватывать нажатия клавиш), и делаем обработчик события формы KeyDown или KeyPress.
Цитата: Bazilisk
На С# пытаюсь работать..
Вот только раздел форума почему-то выбран не тот.
Оказалось, что keypress работает только для выделенного элемента. например для окошка textbox.
Когда я мышкой нажимаю какую то кнопку на форме - то похоже фокус смещается и событие keypress не обрабатывается.
Неужели нет простого способа привязать "горячую клавишу" к кнопке формы?
Просто у меня 50 кнопок и у каждой прописывать Keydown или еще что невероятно геморойно. Да и неправильно как то....
Спасайте!
Цитата: Bazilisk
Оказалось, что keypress работает только для выделенного элемента. например для окошка textbox.
Когда я мышкой нажимаю какую то кнопку на форме - то похоже фокус смещается и событие keypress не обрабатывается.
Неужели нет простого способа привязать "горячую клавишу" к кнопке формы?
Просто у меня 50 кнопок и у каждой прописывать Keydown или еще что невероятно геморойно. Да и неправильно как то....
Когда я мышкой нажимаю какую то кнопку на форме - то похоже фокус смещается и событие keypress не обрабатывается.
Неужели нет простого способа привязать "горячую клавишу" к кнопке формы?
Просто у меня 50 кнопок и у каждой прописывать Keydown или еще что невероятно геморойно. Да и неправильно как то....
Я имею в виду событие формы, а не элементов на ней.
Делаем что-то вроде:
Код:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D1)
button1_Click(sender, e); // или пишем здесь нужный код
if (e.KeyCode == Keys.D2)
button2_Click(sender, e);
}
{
if (e.KeyCode == Keys.D1)
button1_Click(sender, e); // или пишем здесь нужный код
if (e.KeyCode == Keys.D2)
button2_Click(sender, e);
}
Конечно, можно применить switch вместо if.
Повторюсь, что свойство формы KeyPreview необходимо установить в True.
Если я не ошибаюсь, только у компонента MenuItem есть свойство Shortcut, позволяющее задать горячие клавиши.
Спасибо! Сорри, просмотрел.