我想在我的Windows Forms表单中设置热键。例如,Ctrl+N 用于新建表单,Ctrl+S用于保存。我该如何实现?
设置
myForm.KeyPreview = true;
为 KeyDown 事件创建一个处理程序:
myForm.KeyDown += new KeyEventHandler(Form_KeyDown);
处理程序示例:
// Hot keys handler
void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.S) // Ctrl-S Save
{
// Do what you want here
e.SuppressKeyPress = true; // Stops other controls on the form receiving event.
}
}
Form
类型的类中重写ProcessCmdKey
,如下所示:protected override bool ProcessCmdKey(ref Message message, Keys keys)
{
switch (keys)
{
case Keys.B | Keys.Control | Keys.Alt | Keys.Shift:
// ... Process Shift+Ctrl+Alt+B ...
return true; // signal that we've processed this key
}
// run base implementation
return base.ProcessCmdKey(ref message, keys);
}
我认为这更适合于热键操作。不需要 KeyPreview
。
System.Windows.Forms.ToolStripMenuItem
的 ShortcutKeys
属性:myMenuItem.ShortcutKeys = Keys.Control | Keys.S;
我希望为表单添加一个KeyDown
事件,并添加以下代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.N))
{
CreateNew();
}
}
如果您想把它们链接到应用程序中的菜单项上,那么您不需要任何代码。只需在菜单项上设置快捷键属性即可,它将运行与您为菜单项点击配置的相同事件。
最新的回答已经是5年前了,我想在这里更新一下。具体针对菜单热键相关的问题部分,您可以通过设置MenuStrip.MenuItem
对象的属性ShortcutKeys
来进行操作。在Visual Studio中,您可以在窗体设计窗口中打开MenuStrip
对象的属性,一旦滚动到ShortcutKeys
属性,您可以使用VS界面来设置您的热键。
MenuStrip
在菜单项下面加下划线,需要在所需热键的字符前加上“&”符号。例如,如果您想要将“Exit”的“x”加下划线,则属性设置应为E&xit
。
这些属性操作应该产生类似于以下结果*:
注意:要显示快捷键“Ctrl+N”,请将ShowShortcutKeys
属性更改为true
。private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
{
//Do whatever
}
}
如果你想的话,也可以使用隐藏菜单来设置它。只需设置menu.visible = false;属性即可。
KeyPreview
属性了,这在这种情况下是必要的。+1。 - Cheng Chenthis.KeyDown +=(object sender,KeyEventArgs e)=> Form_KeyPress(sender,e,true); this.KeyUp +=(object sender,KeyEventArgs e)=> Form_KeyPress(sender,e,false);
将创建一个名为Form_KeyPress
的处理程序,同时处理KeyDown和KeyUp - 使用附加的布尔变量告诉处理程序键是按下还是释放。它的签名是:Form_Press(object sender,KeyEventArgs e,bool pressed){...}
- Matt