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

15

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

Теги:

8 ответов

44
Лучший ответ

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
    О, ты прав. Я забыл установить свойство KeyPreview , которое необходимо для этого случая. +1.
5

Если в вашем окне есть меню, вы можете использовать свойство 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.

2

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

2

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

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == (Keys.Control | Keys.N))
    {
        CreateNew();
    }
}
  • 1
    Может кто-нибудь, пожалуйста, скажите мне, что это CreateNew ()? Это встроенная функция?
  • 0
    @riya7887: riya7887: Это всего лишь пример. Это не встроенный метод. Вы можете создать такой метод и поместить весь связанный код в.
0

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

Изображение 138698

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

Изображение 138699

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

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

0

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню