如何为Windows窗体TabControl设置键盘快捷键?

时间:2010-12-15 17:33:55

标签: vb.net winforms keyboard-shortcuts tabcontrol hotkeys

是否有一种简单的方法可以为Visual Studio 2010中的选项卡控件中的选项卡设置键盘快捷键?我可以设置一些属性吗?

我在线查看,但我看到的所有文章都非常令人困惑。

2 个答案:

答案 0 :(得分:5)

不幸的是,没有任何此类属性,但实现此功能也不一定非常困难。根据应用程序的设计,有两种方法值得考虑。

  1. 如果承载TabControl的表单已经使用了菜单系统,那么设置几乎是微不足道的。首先,您需要添加一个菜单命令,切换到TabPage中的每个TabControl。然后,您可以简单地为该菜单项添加键盘快捷键( MenuItem / ToolStripMenuItem的简单属性),这样无论何时按下该键,执行菜单命令,切换到相应的TabPage

  2. 但是,菜单系统可能不适合每个表单。如果是这样的话,你将不得不做更多的工作。基本上,您需要将承载KeyPreview的表单的TabControl属性设置为True,并检测要用于切换选项卡的键盘快捷键。

    设置表单KeyPreview property允许该表单在将这些事件传递给具有焦点的控件之前接收键事件。这对于此方法的工作至关重要,否则,表单的KeyDown事件处理程序中的代码将永远不会检测到您要捕获的键击。只有在表单完成处理后,每次击键才会将它们传递给通常会接收它们的控件。

    因此,一旦设置了此属性,就需要将代码添加到表单KeyDown event的处理程序中,以监视要使用的键盘快捷键,然后如果检测到一个,则相应地切换标签按下那些键。否则,你不必做任何事情。

    例如,如果表单上有三个TabPages,您可能会认为 F2 将切换到第一个标签, F3 将切换到第二, F4 将切换到第三个(尽管显然,你可以使用你想要的任何键)。然后,您可以将以下代码添加到表单的KeyDown事件处理程序中,该处理程序检测到这些键被抑制并相应地执行操作:

     Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Select Case e.KeyCode
           Case Keys.F2
              'Switch to the first tab page
              MyTabControl.SelectedIndex = 0
           Case Keys.F3
              'Switch to the second tab page
              MyTabControl.SelectedIndex = 1
           Case Keys.F4
              'Switch to the third tab page
              MyTabControl.SelectedIndex = 2
        End Select
     End Sub
    

答案 1 :(得分:0)

您可以覆盖控件的ProcessCmdKey()方法以实现自定义快捷键击。这样做的最大好处是只有当选项卡控件或选项卡页面上的某个控件具有焦点时,击键才会起作用。 Project + Add Class,粘贴下面显示的代码并编译。将新控件从工具箱顶部拖放到表单上。

Public Class MyTabControl
    Inherits TabControl

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData >= Keys.F1 And keyData <= Keys.F10 Then
            Me.SelectedIndex = keyData - Keys.F1
            Return True
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class

如果您希望功能键无论表格上的控件是否具有焦点,那么您应该覆盖表单的ProcessCmdKey方法。