2010-12-15 128 views
5

有沒有簡單的方法來設置Visual Studio 2010中的選項卡控件中的選項卡的鍵盤快捷鍵?有一些我可以設置的屬性嗎?如何設置Windows窗體TabControl的鍵盤快捷鍵?

我在網上看,但我看到的所有文章都很混亂。

+1

Windows Forms應用程序? ASP.NET? WPF?第三方控件庫? – 2010-12-15 17:38:19

+0

Windows窗體應用程序在後面的代碼中使用VB。 – chama 2010-12-15 17:44:26

+1

爲什麼這不封閉?你還需要別的嗎? – 2010-12-24 07:34:33

回答

5

不幸的是,沒有任何這樣的屬性,但實現這個功能並不一定很難。有兩種方法值得考慮,這取決於應用程序的設計。

  1. 如果承載TabControl的表單已經使用菜單系統,則設置幾乎是微不足道的。首先,您需要添加一個菜單命令,切換到您的TabControl中的每個TabPage。然後,您可以簡單地向該菜單項添加鍵盤快捷鍵(其中簡單屬性MenuItem/ToolStripMenuItem),以便無論何時按下該鍵,該菜單命令都會執行,並切換到相應的TabPage

  2. 但是,菜單系統可能不適合每種形式。如果是這樣的話,你將不得不做更多的工作。基本上,您需要將承載您的TabControl的表單的KeyPreview屬性設置爲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 
    
0

您可以覆蓋一個控件的ProcessCmdKey()方法來實現自定義的快捷鍵。這樣做的一個巨大優勢在於,只有在選項卡頁面上的選項卡控件或其中一個控件具有焦點時,按鍵纔會起作用。 Project +添加類,粘貼下面顯示的代碼並編譯。將新的控件從工具箱的頂部拖放到表單上。

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方法。