gpt4 book ai didi

c# - 像 Windows 资源管理器菜单栏一样自动隐藏 MenuStrip

转载 作者:行者123 更新时间:2023-11-30 18:18:28 25 4
gpt4 key购买 nike

我正在尝试模拟 Windows 资源管理器菜单栏 (win7) 的行为。

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

预期行为:

  • Alt 键 ==> 切换 MenuStripvisible 属性。
  • 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 并且 MenuStripKeyDown 上隐藏,然后在 KeyUp 上再次显示。

我尝试添加一个 bool 值,在 KeyDown 事件中将其设置为 false,然后在 KeyUp 事件中将其设置为 true,因此我可以在设置 之前检查它的值menuBar.Visible = False 但出乎意料的是,事件 MenuDeactivateKeyDown 之前触发,无论 keydown 事件是针对表单还是菜单条.

有什么想法吗?

旁注:虽然我的代码是在 VB 中,但欢迎使用 C# 代码的任何答案。

最佳答案

我设法找到解决此问题的方法,即在隐藏 MenuStrip 之前简单地检查是否按下了 Alt 键。在MenuDeactivate事件,像这样:

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

希望它能对某人有所帮助:)

关于c# - 像 Windows 资源管理器菜单栏一样自动隐藏 MenuStrip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com