3
我试图模拟Windows资源管理器菜单栏(win7)的行为。像Windows资源管理器菜单栏自动隐藏MenuStrip
我检查了this question,它不符合我的要求。
预期的行为:
- 按下Alt键关键 ==>拨动
MenuStrip
的visible
财产。 - 按替代 +
access key char
==>显示MenuStrip
并打开目标菜单。 - 与窗体中的任何其他区域进行交互(即,取消激活
MenuStrip
)==>隐藏MenuStrip
。
我 “最小的,完整的和可核查” 代码:
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
menuBar.Visible = False
End Sub
Private Sub frmMain_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
If e.KeyCode = Keys.Menu Then ' Requirement #1
menuBar.Visible = Not menuBar.Visible
End If
End Sub
Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.Alt AndAlso e.KeyCode <> Keys.Menu Then ' Requirement #2
menuBar.Visible = True
End If
End Sub
Private Sub menuBar_MenuDeactivate(sender As Object, e As EventArgs) Handles menuBar.MenuDeactivate
menuBar.Visible = False ' Requirement #3
End Sub
问题:
当按下Alt键键的同时MenuStrip
是可见的,事件MenuDeactivate
被触发并且MenuStrip
在01上被隐藏,然后在KeyUp
上再次显示。
我尝试添加一个布尔值,它KeyDown
事件设置为false,然后将其设置为true KeyUp
事件,所以设置menuBar.Visible = False
之前,我可以检查它的价值,但是,出乎意料的事件KeyDown
的事件是否是对之前MenuDeactivate
火灾表单或菜单条。
任何想法?
附注:虽然我的代码在VB中,但欢迎使用C#代码的任何答案。