Сочетание клавиш для кнопки - PullRequest
18 голосов
/ 22 октября 2011

В C # (Microsoft Visual Studio 2010 ), как я могу назначить сочетание клавиш для такой кнопки, как показано ниже?

    private void closeButton_Click(object sender, EventArgs e)
    {
        // Close the program
        this.Close();
    }

Я знаю, что могу использовать символ "&" в тексте кнопки и создать ярлык Alt - n , но я бы хотел создать одно сочетание клавиш, например как c для выполнения вышеуказанного.

Ответы [ 3 ]

13 голосов
/ 22 октября 2011

KeyDown - ваш друг;) Например, если вы хотите, чтобы комбинация клавиш A была нажата Shift , попробуйте следующее:

    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.A && e.Shift) 
            // Do something
    }

Если вы хотите использовать «настоящие» сочетания клавиш, вы можете использовать хуки. Посмотрите на вопрос переполнения стека RegisterHotKeys и глобальные зацепки клавиатуры? .

8 голосов
/ 14 июля 2016

Вот другой подход:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch(keyData)
    {
         case Keys.F2:
             // do something...
             return true;
         case Keys.F3:
             // do something...
             return true;
         case Keys.F4:
             // do something...
             return true;
         default:
             return base.ProcessCmdKey(ref msg, keyData);
    }            
}

Вам не нужно менять KeyPreview значение.

4 голосов
/ 06 апреля 2018

, если вы хотите добавить Ctrl + S в статусе переключателя, так что вы также можете попробовать код ниже.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Control | Keys.S:
                // do something...
                return true;
            case Keys.Control |Keys.Alt | Keys.S:
                // do something...
                return true;
            case Keys.F2:
                // do something...
                return true;
            case Keys.F3:
                // do something...
                return true;
            case Keys.F4:
                // do something...
                return true;
            default:
                return base.ProcessCmdKey(ref msg, keyData);
        }
    }
...