我在使用ToolStripMenuItems的Vb.NET 2008 windows窗体中有一个解决方案,
但我需要实现菜单导航而无需任何鼠标干预。
我只在ToolStripMenuItems,MenuStrip等中找到了鼠标事件。
所有MenuStrip和ToolStripMenuItem都是以编程方式创建的,从数据库读取用户权限,然后添加处理程序来管理事件,但客户端不希望鼠标交互,他只想要键盘输入!。
添加菜单例程:
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
THX。
答案 0 :(得分:3)
这是非常基本的东西,所以如果这不是你需要的,只要忽略这个答案,但在我看来,这就是你所要问的。
无论如何,使用键盘可以轻松访问ToolStripMenuItem ...
如果您从工具箱中将MenuStrip插入表单,而不是使用MenuStrip Tasks中的“插入标准项目”选项来插入标准菜单项,则在启动winforms应用程序时,如果按Alt键,您会注意到来自每个顶级ToolStripMenuItem的字母带下划线。如果您按下该键与Alt键组合,则会提醒您该ToolStripMenuItem的子项可用。例如,如果按Alt + F,则会删除“文件”菜单。
以这种方式删除顶级菜单后,您可以再按一个键盘键来访问子项目。这是通过添加&设计器中ToolStripMenuItem的“Text”属性中任何字母前面的char。这允许您在使用Alt + Key组合删除顶级菜单后访问子项。例如,默认情况下,OpenToolStripMenuItem是文件菜单的子项,具有&字母O(& Open)前面的字符,因此您的用户可以通过按Alt + F + O而不是使用鼠标轻松访问此事件。
除此之外,您还可以使用ToolStripMenuItem的“ShortcutKeys”属性轻松地为每个ToolStripMenuItem指定快捷键。如果您在设计器中下拉所选的ToolStripMenuItem的'ShortcutKeys'属性,您将能够选择修改器(Ctrl,Shift,Alt)和您想要与该修改器结合使用的键盘键(通常为Ctrl + O)对于文件>打开)。使用相同的方法,您可以为您自己添加到菜单条的任何ToolStripMenuItem指定键盘快捷键...
希望这会有所帮助......
答案 1 :(得分:1)
按照建议使用快捷方式,但也要在基本菜单容器上将TabStop设置为True。它将允许键盘通过制表符和箭头键访问菜单。
您应该能够使用mousedown和click事件的组合来测试“Enter键”。添加一个布尔值,您可以在mousedown事件(点击前触发)中设置为true,以确定是否使用鼠标单击按钮。然后在Click事件中,在清除布尔值后检查boolean和exit子。如果没有设置mousedown布尔值,则按下回车键以触发事件。