Как я могу использовать нажатие клавиши для запуска метода? - PullRequest
1 голос
/ 05 января 2012

Моя форма имеет несколько кнопок, таких как «Сканировать» и «Выход».Я видел во многих программах, где кнопки будут использоваться при нажатии клавиш.Много раз уникальная клавиша для нажатия подчеркивается в тексте на кнопке (я не знаю, как использовать функцию подчеркивания на этих форумах!).Я пошел в форму и добавил событие нажатия клавиши:

private void Form1_KeyPress(object sender, KeyPressEventArgs key)
    {
        switch (key.ToString())
        {
            case "s":
                Run_Scan();
                break;
            case "e":
                Application.Exit();
                break;
            default:                    
                MessageBox.Show("I'll only accept 's' or 'e'.");
                break;
        }
    }

Но затем нажатие 's' или 'e' в форме ничего не делает.Не уверен, где я иду не так?

Ответы [ 4 ]

2 голосов
/ 05 января 2012

Я думаю, что вы ищете то, что называется Ключи доступа : определены символом '&'.

Избавьтесь от вашего обработчика событий KeyPress. Вам это не понадобится.

Измените текст кнопок на «& Сканирование» и «& Выход».

Также: Вот несколько рекомендаций по использованию ключей доступа в приложениях Windows.

2 голосов
/ 05 января 2012

Переопределение ProcessKeyCommand будет принимать входные данные из любой точки формы. Однако вы должны добавить модификатор, поскольку, например, нажатие 's' или 'e' в текстовом поле также вызовет действие.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {

    switch (keyData)
    {
        case Keys.S:
            Run_Scan();                
            break;
        case Keys.E:
            Application.Exit();
            break;
        default:                    
            MessageBox.Show("I'll only accept 's' or 'e'.");                
            break;

    }        

    return base.ProcessCmdKey(ref msg, keyData);
}
1 голос
/ 05 января 2012

Вы можете поставить амперсанд перед буквой, для которой вы хотите сделать горячую клавишу для кнопки в свойстве Текст вашей кнопки. Вы можете установить свойство «Текст» на панели «Свойства» в конструкторе форм или установить его программно. Ниже приведен пример программного подхода.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // make the 'B' key the hot key to trigger the key press event of button1
        button1.Text = "&Button";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("B");
    }
}
1 голос
/ 05 января 2012

key.ToString() - неправильный метод для вызова. Вы хотите получить доступ к ключевому свойству: key.KeyChar.

См. MSDN здесь для получения дополнительной информации о KeyPressEventArgs, включая примеры.

...