2010-12-15 124 views
5

Existe-t-il un moyen facile de définir un raccourci clavier pour un onglet dans un contrôle onglet dans Visual Studio 2010? Y a-t-il une propriété que je peux définir?Comment puis-je configurer des raccourcis clavier pour un Windows Forms TabControl?

J'ai regardé en ligne, mais tous les articles que j'ai vus étaient très confus.

+1

Application Windows Forms? ASP.NET? WPF? Bibliothèque de contrôles tiers? –

+0

Windows Formulaire de l'application en utilisant VB dans le code derrière. – chama

+1

Pourquoi n'est-ce pas encore fermé? Avez-vous besoin d'autre chose? –

Répondre

5

Malheureusement, il n'existe aucune propriété de ce type, mais l'implémentation de cette fonctionnalité ne doit pas non plus être difficile. Il y a deux façons d'envisager, en fonction de la conception de votre application.

  1. Si la forme qui héberge le TabControl utilise déjà un système de menu, il est presque trivial de mettre en place. Tout d'abord, vous devez ajouter une commande de menu qui passe à TabPage dans votre TabControl. Ensuite, vous pouvez simplement ajouter un raccourci clavier à cet élément de menu (est une simple propriété d'un MenuItem/ToolStripMenuItem), de sorte que chaque fois que cette touche est pressée, cette commande de menu est exécutée, qui passe au TabPage approprié. Toutefois, un système de menus peut ne pas convenir à tous les formulaires. Si c'est le cas, vous allez devoir faire un peu plus de travail. Fondamentalement, vous devez définir la propriété KeyPreview du formulaire qui héberge votre TabControl sur True et détecter les raccourcis clavier que vous souhaitez utiliser pour changer d'onglet.

    La définition d'un formulaire KeyPreview property permet à ce formulaire de recevoir des événements clés avant que ces événements soient transmis au contrôle qui a le focus. Ceci est crucial pour que cette méthode fonctionne, car sinon, votre code dans le gestionnaire d'événements KeyDown du formulaire ne détectera jamais les séquences de touches que vous souhaitez intercepter. Ce n'est qu'une fois que le formulaire a fini de traiter chaque frappe qu'ils seront transmis au contrôle qui les recevrait normalement. Donc, une fois que vous avez défini cette propriété, vous devez ajouter du code au gestionnaire KeyDown event de votre formulaire qui surveille les raccourcis clavier que vous souhaitez utiliser, puis change d'onglet en conséquence s'il détecte que l'une de ces touches est pressé. Sinon, vous n'avez rien à faire.

    Par exemple, si vous avez trois TabPages sur votre formulaire, vous pouvez décider que F2 passe au premier onglet, F3 passe à la seconde, et F4 passera à la troisième (bien que , évidemment, vous pouvez utiliser toutes les clés que vous vouliez). Vous pouvez ensuite ajouter le code suivant au gestionnaire d'événements KeyDown de votre formulaire qui détecte les clés étant déprimé et agit en conséquence:

    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

Vous pouvez remplacer la méthode ProcessCmdKey() d'un contrôle pour mettre en œuvre des frappes personnalisées raccourcis. Un gros avantage de cette façon est que la frappe ne fonctionnera que lorsque le contrôle de tabulation ou l'un des contrôles sur les pages à onglets aura le focus. Projet + Ajouter une classe, collez le code ci-dessous et compilez. Déposez le nouveau contrôle du haut de la boîte à outils sur votre formulaire.

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 

Si vous voulez que les touches de fonction pour travailler, peu importe ce que le contrôle sur le formulaire a le focus alors vous devriez remplacer la méthode ProcessCmdKey du formulaire.