如何在C#Windows应用程序中使用热键进行按钮
答案 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();
}