如何使用按键来运行方法?

时间:2012-01-04 20:29:13

标签: c# button keypress keydown

我的表单有几个按钮,如“扫描”和“退出”。我在很多程序中都看到过按键可以使用按钮。很多时候按下的唯一键是按下的文本中的下划线(我不知道如何在这些论坛上使用下划线选项!)。我去了表格并添加了一个按键事件:

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 个答案:

答案 0 :(得分:2)

重写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 :(得分:2)

我认为您正在寻找所谓的Access Keys:由'&'定义符号

摆脱你的KeyPress事件处理程序。你不需要它。

将按钮文字更改为“& Scan”和“& Exit”。

另外:Here are some guidelines about using access keys in windows applications.

答案 2 :(得分:1)

key.ToString()是错误的调用方法。您想要访问密钥属性:key.KeyChar

有关KeyPressEventArgs的更多信息,请参阅MSDN here,其中包含示例。

答案 3 :(得分:1)

您可以在要为按钮的Text属性中的按钮创建热键的字母前放置一个&符号。您可以在表单设计器的“属性”窗格中设置Text属性,也可以以编程方式设置它。以下是程序化方法的示例。

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");
    }
}