C# 将Windows窗体ToolStripMenuItem ShortcutKeys属性设置为numpad键无效

C# 将Windows窗体ToolStripMenuItem ShortcutKeys属性设置为numpad键无效,c#,winforms,keyboard-shortcuts,C#,Winforms,Keyboard Shortcuts,我们能够为Windows窗体应用程序菜单项定义快捷键。这样我就可以告诉菜单项文件->保存,让快捷键Ctrl+S,并且在按下Ctrl+S后,菜单项的处理程序会“神奇地”执行 问题在于数字键盘键,ShortcutKey属性不接受它们(我不明白它们与其他可接受的键有何不同) MSDN声明该属性接受System.Windows.Forms.Keys类型(键值之一,默认为None);当参数不是键值之一时,将抛出一个InvalidEnumArgumentException。但例如Keys.Divide是键值

我们能够为Windows窗体应用程序菜单项定义快捷键。这样我就可以告诉菜单项文件->保存,让快捷键Ctrl+S,并且在按下Ctrl+S后,菜单项的处理程序会“神奇地”执行

问题在于数字键盘键,
ShortcutKey
属性不接受它们(我不明白它们与其他可接受的键有何不同)

MSDN声明该属性接受System.Windows.Forms.Keys类型(键值之一,默认为None);当参数不是键值之一时,将抛出一个
InvalidEnumArgumentException
。但例如Keys.Divide是键值之一,但它不能被使用

那么,如何将菜单项设置为具有Numpad
*
或Numpad
+
的快捷方式呢?是否需要在窗体的ProcessCmdKey事件中处理密钥

必须在快捷方式中使用Ctrl或Alt

例如:

//working:  
toolStripMenuItem1.ShortcutKeys = Keys.Control | Keys.NumPad0;  
//throws exception  
toolStripMenuItem1.ShortcutKeys = Keys.NumPad0;  

要回答有关使用Numpad
*
和Numpad
+
的问题,请执行以下操作:

  • Numpad
    *
    称为乘法键。枚举名称为
    Multiply

  • Numpad
    +
    称为add键。枚举名称为
    Add

  • Numpad
    -
    称为减法键。枚举名称为
    Subtract

在VisualStudio的属性窗口(至少不在VisualStudio2008中)中无法选择这些,但可以编辑相应的源代码;其中设置了属性
ShortcutKeys
。例如,对于名为
mnuMoreTime
的菜单项的Numpad
+

this.mnuMoreTime.ShortcutKeys = 
    ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control |
                                  System.Windows.Forms.Keys.Add)));

当我想起来的时候,这是有道理的。