2016-12-28 129 views
3

我试图模拟Windows资源管理器菜单栏(win7)的行为。像Windows资源管理器菜单栏自动隐藏MenuStrip

我检查了this question,它不符合我的要求。

预期的行为:

  • 按下Alt键关键 ==>拨动MenuStripvisible财产。
  • 替代 + 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#代码的任何答案。

回答

0

我设法弄清楚这个问题,这是简单地检查Alt键按键/在MenuDeactivate事件隐藏MenuStrip前按住,这样的解决方法:

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 

希望它能帮助别人:)

相关问题