Как установить горячие клавиши для формы Windows Forms

Я хотел бы установить горячие клавиши в моей форме Windows Forms. Например, Ctrl + N для новой формы и Ctrl + S для сохранения. Как мне это сделать?

Ответы

Ответ 1

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.
        }
    }

Ответ 2

Если в вашем окне есть меню, вы можете использовать свойство ShortcutKeys System.Windows.Forms.ToolStripMenuItem:

myMenuItem.ShortcutKeys = Keys.Control | Keys.S;

В Visual Studio вы также можете установить его на странице свойств элемента меню.

Ответ 3

Вы также можете переопределить 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.

Ответ 4

Мне нужно событие KeyDown для формы и некоторый код:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == (Keys.Control | Keys.N))
    {
        CreateNew();
    }
}

Ответ 5

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

Ответ 6

Сначала вам нужно обработать событие KeyDown, а затем вы можете начать просмотр ваших модификаторов:

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
    {
        //Do whatever
    }
}

Конечно, вам нужно убедиться, что ваша форма подписчивается на событие KeyDown.

Ответ 7

Вы можете установить его, используя скрытое меню, если хотите. Просто установите свойство menu.visible = false;

Ответ 8

Я думал, что выложу обновление здесь, так как новейшему ответу 5 лет. Вы можете управлять свойствами вашего объекта MenuStrip.MenuItem, установив свойство ShortcutKeys. В Visual Studio вы можете сделать это в окне дизайна формы, открыв свойства вашего объекта MenuStrip. После прокрутки до свойства ShortcutKeys вы можете использовать интерфейс VS для установки горячих клавиш.

enter image description here

Если вы хотите, чтобы MenuStrip подчеркивал пункт меню, MenuStrip префикс амперсанда (&) к символу нужной горячей клавиши. Так, например, если вы хотите, чтобы "x" в Exit подчеркивался, значение свойства должно быть E&xit.

enter image description here

Эти манипуляции со свойствами должны давать результат, подобный следующему *: enter image description here

* Примечание. Чтобы отобразить сочетание клавиш "Ctrl + N", измените свойство ShowShortcutKeys на true.