我想在我的Windows窗体表单中设置热键。例如,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.
}
}
如果您的窗口有菜单,您可以使用ShortcutKeys
的System.Windows.Forms.ToolStripMenuItem
属性:
myMenuItem.ShortcutKeys = Keys.Control | Keys.S;
在Visual Studio中,您也可以在菜单项的属性页中进行设置。
您也可以在ProcessCmdKey
派生类型中覆盖Form
,如下所示:
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
。
我想要一个表格的KeyDown
事件和一些像这样的代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.N))
{
CreateNew();
}
}
如果您尝试将它们链接到应用程序中的菜单项,那么您不需要任何代码。在菜单项上,您只需设置快捷键属性,它将运行您为菜单项单击配置的相同事件。
如果需要,您也可以使用隐藏菜单进行设置。只需设置menu.visible = false的属性;
首先,您需要处理KeyDown事件,然后您可以开始注意修改器:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
{
//Do whatever
}
}
当然,您需要确保您的表单订阅了KeyDown事件。
因为最新的答案是5岁,我想我会在这里做一个更新。具体解决有关菜单热键的问题部分,您可以通过设置MenuStrip.MenuItem
属性来操纵ShortcutKeys
对象的属性。在Visual Studio中,您可以通过打开MenuStrip
对象的属性在表单设计窗口中执行此操作。向下滚动到ShortcutKeys
属性后,您可以使用VS界面设置热键。
如果您希望MenuStrip
为菜单项加下划线,请将&符号(&)char添加到所需热键的字符处。因此,例如,如果您希望Exit的“x”加下划线,则属性设置应为E&xit
。
*注意:要显示快捷键“Ctrl + N”,请将ShowShortcutKeys
属性更改为true
。