我的一个表单中有一个MenuStrip,这样用户就有了一个菜单栏,可以从中选择各种内容。为了方便起见,有些还映射了快捷键。我还通过覆盖MenuStrip的渲染器实现了所有项目及其子菜单的自定义外观。
当我为附加了下拉列表的项目使用快捷键时,就会出现问题。当列表关闭时,如果我按下转义键,列表将按预期关闭,但父项目仍处于选中状态。它仍然是突出的,它仍然有焦点。再次按下退出键没有任何作用。我认为我应该自己实施这种行为?如果是,如何?ToolStripMenuItems似乎没有任何函数调用会告诉它取消选择。
编辑:如果有人好奇,我正在寻找在窗体的KeyDown事件中捕获转义键。我用它来退出表单。这是代码:
Private Sub myForm_KeyDown(sender as Object, e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Escape Then
Me.Close()
e.Handled = True
End If
End Sub
但即使我对此发表评论,我仍然会有上述行为。
默认情况下,放置在窗体的KeyDown事件中的代码只有在窗体本身具有焦点时才会触发。为了激发这些事件,无论表单上的焦点是什么,您必须更改表单的以下属性:
KeyPreview从False到True。
当焦点放在窗体上的任何控件上时,这会导致窗体的"键"相关事件触发。