C# 可以添加ESC键快捷方式吗?

C# 可以添加ESC键快捷方式吗?,c#,.net,winforms,C#,.net,Winforms,我的表单上有一个菜单提示项,当我按下它时,它会关闭我的表单。我想为我的MenuStrip项目设置快捷键Esc,但在“ShorcutKey”设置中,它没有Esc选项,有没有办法让它成为Esc?我必须在菜单上显示Esc是快捷键 这样做行不通: menuStripItem.ShortcutKeys = Keys.Escape; 我认为没有直接的解决方法,您可以使用此解决方法,在代码中设置ShortcutKeyDisplayString menuStripItem.ShortcutKeyDisplay

我的
表单上有一个
菜单提示
项,当我按下它时,它会关闭我的
表单
。我想为我的
MenuStrip
项目设置快捷键Esc,但在“ShorcutKey”设置中,它没有Esc选项,有没有办法让它成为Esc?我必须在
菜单上显示Esc是快捷键

这样做行不通:

menuStripItem.ShortcutKeys = Keys.Escape;

我认为没有直接的解决方法,您可以使用此解决方法,在代码中设置
ShortcutKeyDisplayString

menuStripItem.ShortcutKeyDisplayString = "ESC";

在窗体的
KeyDown
事件中,检查是否按下了
ESC
并且
Close()
窗体。

Winforms对您选择的快捷键非常挑剔。规则是它必须是一个功能键(F1-F12)或另一个包含
键、Control
键、Alt
的键。这里更大的意图是,您不能意外地替换可能在
文本框中使用的普通键。退出键通常操作对话框的取消按钮

键。Escape
相当特殊;Alt+Escape和Ctrl+Escape无法工作,因为它们是Windows中的全局快捷键

因此,您不能使用
ShortcutKeys
属性;您必须以不同的方式识别转义键。通过重写
ProcessCmdKey()
方法,可以在表单类中轻松完成。将此代码粘贴到表单中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Escape) {
        this.Close();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

我有一个代码,这样我就可以按ESC键关闭程序。我要做的是使其在快捷键区域显示,该快捷键为ESC感谢您的尝试。然后,正如我在代码中所示,您可以将
ShortcutKeyDisplayString
属性设置为
Escape
。如果您只需要将ESC显示为快捷键,会出现什么情况?您最好使用
取消按钮
。这可以关闭它,但我已经有了相应的代码。我需要的是让它显示快捷键。@Dozer789即使您有代码关闭它,此代码也更好,因为您可以阻止默认的命令键过程,
ESC
是一个特殊的命令键,在某些情况下可能会意外工作。因此,禁用/覆盖默认操作会更好。我可能在我的程序中使用了此代码,我不记得了。如果我不是,我可能会使用此代码。+1这可能不是OP想要的,但正是我想要的,并且避免了我添加自己的问题。非常感谢。