是否有一种简单的方法可以为Visual Studio 2010中的选项卡控件中的选项卡设置键盘快捷键?我可以设置一些属性吗?
我在线查看,但我看到的所有文章都非常令人困惑。
答案 0 :(得分:5)
不幸的是,没有任何此类属性,但实现此功能也不一定非常困难。根据应用程序的设计,有两种方法值得考虑。
如果承载TabControl
的表单已经使用了菜单系统,那么设置几乎是微不足道的。首先,您需要添加一个菜单命令,切换到TabPage
中的每个TabControl
。然后,您可以简单地为该菜单项添加键盘快捷键( 是MenuItem
/ ToolStripMenuItem
的简单属性),这样无论何时按下该键,执行菜单命令,切换到相应的TabPage
。
但是,菜单系统可能不适合每个表单。如果是这样的话,你将不得不做更多的工作。基本上,您需要将承载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方法。