Я хотел бы установить горячие клавиши в моей форме Windows Forms. Например, Ctrl + N для новой формы и Ctrl + S для сохранения. Как мне это сделать?
Set
myForm.KeyPreview = true;
Создайте обработчик для события KeyDown:
myForm.KeyDown += new KeyEventHandler(Form_KeyDown);
Пример обработчика:
// Hot keys handler
void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.S) // Ctrl-S Save
{
// Do what you want here
e.SuppressKeyPress = true; // Stops other controls on the form receiving event.
}
}
Если в вашем окне есть меню, вы можете использовать свойство ShortcutKeys
System.Windows.Forms.ToolStripMenuItem
:
myMenuItem.ShortcutKeys = Keys.Control | Keys.S;
В Visual Studio вы также можете установить его на странице свойств элемента меню.
Вы также можете переопределить ProcessCmdKey
в производном типе Form
следующим образом:
protected override bool ProcessCmdKey(ref Message message, Keys keys)
{
switch (keys)
{
case Keys.B | Keys.Control | Keys.Alt | Keys.Shift:
// ... Process Shift+Ctrl+Alt+B ...
return true; // signal that we've processed this key
}
// run base implementation
return base.ProcessCmdKey(ref message, keys);
}
Я считаю, что он больше подходит для горячих клавиш. Нет KeyPreview
.
Если вы пытаетесь связать их с элементами меню в своем приложении, вам не нужен какой-либо код. В элементе меню вы можете просто настроить свойство сочетания клавиш и запустить одно и то же событие, настроенное для вашего пункта меню.
Мне нужно событие KeyDown
для формы и некоторый код:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.N))
{
CreateNew();
}
}
Я думал, что выложу обновление здесь, так как новейшему ответу 5 лет. Вы можете управлять свойствами вашего объекта MenuStrip.MenuItem
, установив свойство ShortcutKeys
. В Visual Studio вы можете сделать это в окне дизайна формы, открыв свойства вашего объекта MenuStrip
. После прокрутки до свойства ShortcutKeys
вы можете использовать интерфейс VS для установки горячих клавиш.
Если вы хотите, чтобы MenuStrip
подчеркивал пункт меню, MenuStrip
префикс амперсанда (&) к символу нужной горячей клавиши. Так, например, если вы хотите, чтобы "x" в Exit подчеркивался, значение свойства должно быть E&xit
.
Эти манипуляции со свойствами должны давать результат, подобный следующему *:
* Примечание. Чтобы отобразить сочетание клавиш "Ctrl + N", измените свойство ShowShortcutKeys
на true
.
Вы можете установить его, используя скрытое меню, если хотите. Просто установите свойство menu.visible = false;
Сначала вам нужно обработать событие KeyDown, а затем вы можете начать просмотр ваших модификаторов:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
{
//Do whatever
}
}
Конечно, вам нужно убедиться, что ваша форма подписчивается на событие KeyDown.
KeyPreview
, которое необходимо для этого случая. +1.