【问题标题】:How to use ToolStripMenuItems without mouse events ( click or double Click event )?如何在没有鼠标事件(单击或双击事件)的情况下使用 ToolStripMenuItems?
【发布时间】:2010-04-04 06:14:31
【问题描述】:

我在 Vb.NET 2008 windows Form 中有一个带有 ToolStripMenuItems 的解决方案,

但我需要在没有任何鼠标干预的情况下实现菜单导航。

我只在 ToolStripMenuItems、MenuStrip 等中发现了鼠标事件

所有的 MenuStrip 和 ToolStripMenuItems 都是以编程方式创建的,从数据库中读取用户权限,然后添加一个处理程序来管理事件,但是客户端不想要鼠标交互,他只想要键盘输入!。

添加菜单例程:

    Private Sub AddModulo(ByVal strNAME As String, ByVal strTITULO As String)

    Dim oToolStripMenuItem As New ToolStripMenuItem(strTITULO)

    oToolStripMenuItem.Name = strNAME
    oToolStripMenuItem.Text = "&" & strTITULO


    mnuPrincipal.Items.Add(oToolStripMenuItem)
    AddHandler oToolStripMenuItem.MouseMove, AddressOf LoadMenu


End Sub

添加项目例程:

    Private Sub AddItems(ByVal StrModulo As String, ByVal strItem As String)

    Dim mnuItem As New ToolStripMenuItem

    mnuItem.Name = StrModulo.ToUpper
    mnuItem.Size = New System.Drawing.Size(145, 22)

    If Microsoft.VisualBasic.Left(strItem, 1) = "-" Then

        mnuItem.Text = "                " & Microsoft.VisualBasic.Mid(strItem.ToUpper, 2)
        mnuItem.BackColor = Color.Blue
        mnuItem.ForeColor = Color.White

    Else
        mnuItem.Text = strItem
    End If

    mnuItem.Tag = UCase(Mid(StrModulo, 5, 2))

    AddHandler mnuItem.Click, AddressOf LoadMenuItem

    Dim newOption = mnuPrincipal.Items(mnuPrincipal.Items.Count - 1)
    newOption.DropDownItems.Add(mnuItem)

End Sub

谢谢。

【问题讨论】:

  • 按 Alt,使用箭头键。

标签: vb.net winforms visual-studio-2008 menu


【解决方案1】:

这是非常基本的东西,所以如果这不是你需要的,请忽略这个答案,但在我看来,这就是你要问的。

无论如何,ToolStripMenuItems 可以使用键盘轻松访问...

如果您从工具箱中将 MenuStrip 插入表单,然后使用 MenuStrip 任务中的“插入标准项”选项插入标准菜单项,则在启动 winforms 应用程序时,如果按 Alt 键,您会注意到来自每个顶级 ToolStripMenuItem 的字母带有下划线。如果您按下该键并结合 Alt 键,这会提醒您该 ToolStripMenuItem 的子项可用。例如,如果您按 Alt+F,则会放下“文件”菜单。

以这种方式删除顶级菜单后,您可以再按一个键盘键来访问子项目。这是通过在设计器中 ToolStripMenuItem 的“文本”属性中的任何字母前面添加一个 & 字符来完成的。这允许您在使用 Alt+Key 组合删除顶级菜单后访问子项。例如,默认情况下,作为文件菜单的子项的 OpenToolStripMenuItem 在字母 O (&Open) 前面有 & 字符,因此您的用户可以通过按 Alt+F+O 而不是使用鼠标轻松访问此事件。

除此之外,您还可以使用 ToolStripMenuItem 的“ShortcutKeys”属性轻松地为每个 ToolStripMenuItem 分配快捷键。如果您在设计器中下拉选定的 ToolStripMenuItem 的“ShortcutKeys”属性,您将能够选择修饰符(Ctrl、Shift、Alt)和要与该修饰符组合使用的键盘键(通常是 Ctrl+O对于文件>打开)。使用相同的方法,您可以将键盘快捷键分配给您自己添加到菜单条的任何 ToolStripMenuItem...

希望这会有所帮助...

【讨论】:

  • 请阅读我的帖子我添加了一些代码来更好地解释我的问题
【解决方案2】:

按照建议使用快捷方式,但也要在基本菜单容器上将 TabStop 设置为 True。它将允许键盘通过选项卡和箭头键访问菜单。

您应该能够使用 mousedown 和 click 事件的组合来测试“Enter 键”。添加一个布尔值,您可以在 mousedown 事件(单击前触发)中将其设置为 true,以确定是否使用鼠标单击按钮。然后在 Click 事件中检查布尔值并在清除布尔值后退出子。如果未设置 mousedown 布尔值,则按下回车键触发事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2023-04-04
    • 2021-08-07
    • 2019-02-09
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多