热键到C#Windows应用程序中的按钮

时间:2010-03-19 01:08:59

标签: c#

如何在C#Windows应用程序中使用热键进行按钮

8 个答案:

答案 0 :(得分:20)

覆盖表单的ProcessCmdKey。如果您发现了自己喜欢的击键,请使用与该按钮相同的方法。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Control | Keys.X))
    {
        DoSomething();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

private void button1_Click(object sender, EventArgs e)
{
    DoSomething();
}

private void DoSomething()
{
    MessageBox.Show("hi!");
}

编辑:如果您能找到合适的助记符,Jay的方法会更好。

答案 1 :(得分:13)

将按钮的UseMnemonic属性设置为true,并在要用于热键的按钮的Text属性中的字母前添加&符号(&)。

用户可以按Alt +激活热键。

答案 2 :(得分:8)

Windows应用程序和快捷键是同义词。人们更喜欢使用快捷键来加快活动速度。假设您在文本框中,并且您想要按F5重新加载表单。您不想移动鼠标光标。那么,你将要做的是你将在文本框中添加“Key Down”事件。但是,如果您在不同的文本框或按钮中,那将无法正常工作。因此,您将在表单中添加“Key Down”事件。

但是你需要启用一个属性才能正常工作,这就是诀窍。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F5)
    {
        btnRefresh_Click(null, null);
    }
}

但是黄金技巧是,在Form的属性窗口中进行以下更改:

KeyPreview = True 

享受编程。

答案 3 :(得分:1)

此外,每种形式都有AcceptButton和CancelButton属性。如果您要缩小热键用法以进入和退出按钮,而这些按钮又会调用某些按钮,我建议您考虑使用这些属性。

答案 4 :(得分:0)

我认为这就是你想要的:

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //Do whatever you want here...
        }
    }

当然,您可以将Keys.Enter更改为您想要的任何键。

答案 5 :(得分:0)

this.KeyDown += new KeyEventHandler(Form1_KeyDown);

void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
 if (e.Alt && e.KeyCode == Keys.W) 
   { 
     //do something 
   } 
}

答案 6 :(得分:0)

根据Micheal的答案,如果你不能使用组合键,那么这是一个更优雅的版本:

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

答案 7 :(得分:-1)

尽管这篇帖子超级老,但这是一种更简单的方法,代码非常差,但它可以很好地完成工作。

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
        if (e.KeyCode == Keys.Enter)
        {

            button1.PerformClick();

        }