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#代碼的任何答案。