簡體   English   中英

像Windows資源管理器菜單欄一樣自動隱藏MenuStrip

[英]Auto-hide MenuStrip like Windows Explorer menu bar

我正在嘗試模擬Windows資源管理器菜單欄(win7)的行為。

我檢查了這個問題但它不符合我的要求。

預期行為:

  • Alt鍵==>切換MenuStrip visible屬性。
  • Alt + 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

問題:

MenuStrip可見時按Alt鍵,將觸發事件MenuDeactivate ,並在KeyDown隱藏MenuStrip ,然后在KeyUp再次顯示。

我嘗試添加一個布爾值,在KeyDown事件中將其設置為false,然后在KeyUp事件中將其設置為true,因此我可以在設置menuBar.Visible = False之前檢查其值,但是,意外地,事件MenuDeactivateKeyDown之前觸發,無論keydown事件是否為形式或menustrip。

有任何想法嗎?

旁注 :盡管我的代碼是在VB中,但歡迎使用C#代碼的任何答案。

我設法找出了解決這個問題的方法,即在MenuDeactivate事件中隱藏MenuStrip之前,只需檢查是否按下了Alt鍵,如下所示:

If Not My.Computer.Keyboard.AltKeyDown Then menuBar.Visible = False

有人感興趣 的完整實施

Private Sub frmMain_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    If e.KeyCode = Keys.Menu Then
        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
        menuBar.Visible = True
    ElseIf e.KeyData = Keys.Escape Then
        menuBar.Visible = False
    End If
End Sub

Private Sub menuBar_MenuDeactivate(sender As Object, e As EventArgs) Handles menuBar.MenuDeactivate
    If Not My.Computer.Keyboard.AltKeyDown Then menuBar.Visible = False
End Sub

希望它會幫助別人:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM