2010-12-15 2 views
5

Gibt es eine einfache Möglichkeit, eine Tastenkombination für eine Registerkarte in einem Registersteuerelement in Visual Studio 2010 festzulegen? Gibt es eine Eigenschaft, die ich einstellen kann?Wie kann ich Tastenkombinationen für ein Windows Forms TabControl einrichten?

Ich schaute online, aber alle Artikel, die ich sah, waren sehr verwirrend.

+1

Windows Forms App? ASP.NET? WPF? Third-Party-Bibliothek von Steuerelementen? –

+0

Windows Form App mit VB im Code dahinter. – chama

+1

Warum ist das noch nicht geschlossen? Brauchen Sie sonst noch etwas? –

Antwort

5

Leider gibt es keine solche Eigenschaft, aber die Implementierung dieser Funktionalität muss auch nicht schwierig sein. Je nach Design Ihrer Anwendung sind zwei Möglichkeiten zu überlegen.

  1. Wenn das Formular, das die TabControl bereits verwendet ein Menüsystem beherbergt, ist es fast trivial einzurichten. Zuerst müssen Sie einen Menübefehl hinzufügen, der zu jedem TabPage in Ihrem TabControl wechselt. Dann können Sie einfach eine Tastenkombination zu diesem Menüpunkt hinzufügen (ist eine einfache Eigenschaft eines MenuItem/ToolStripMenuItem), so dass immer, wenn diese Taste gedrückt wird, dieser Menübefehl ausgeführt wird, der auf die entsprechende TabPage schaltet.

  2. Ein Menüsystem ist jedoch möglicherweise nicht für jedes Formular geeignet. Wenn das der Fall ist, musst du etwas mehr arbeiten. Grundsätzlich müssen Sie die -Eigenschaft des Formulars, das Ihre TabControl hostet, auf True festlegen und die Tastenkombinationen ermitteln, die Sie zum Wechseln der Registerkarten verwenden möchten.

    Durch Festlegen der KeyPreview property eines Formulars kann dieses Formular Schlüsselereignisse empfangen, bevor diese Ereignisse an das Steuerelement weitergeleitet werden, das den Fokus hat. Dies ist wichtig, damit diese Methode funktioniert, da andernfalls Ihr Code in der Ereignisbehandlungsroutine KeyDown des Benutzers die Tastatureingaben nicht erkennt, die Sie abfangen möchten. Erst wenn das Formular die Verarbeitung abgeschlossen hat, wird jeder Tastendruck an das Steuerelement übergeben, das sie normalerweise empfangen würde.

    Nachdem Sie diese Eigenschaft festgelegt haben, müssen Sie dem Handler für die KeyDown event Ihres Formulars Code hinzufügen, der nach den Tastenkombinationen sucht, die Sie verwenden möchten, und dann die Registerkarten entsprechend umschaltet, wenn einer dieser Tasten erkannt wird wird gedrückt. Ansonsten müssen Sie nichts tun.

    Zum Beispiel, wenn Sie haben drei TabPages auf dem Formular, können Sie entscheiden, dass F2 auf den ersten Registerkarte wechseln, F3 wird mit dem zweiten Schalter und F4 schaltet auf den dritten (obgleich natürlich könnten Sie die Tasten verwenden, die Sie wollten. Sie würden den folgenden Code in das Formular des KeyDown Ereignishandler dann hinzufügen, die diese Schlüssel erkennt niedergedrückt und wirkt dementsprechend:

    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

Sie können eine ProcessCmdKey() -Methode Kontrolle außer Kraft setzen individuelle Tastaturbefehle zu implementieren. Ein großer Vorteil dabei ist, dass der Tastenanschlag nur funktioniert, wenn das Tab-Steuerelement oder eines der Steuerelemente auf den Registerkarten den Fokus hat. Projekt + Klasse hinzufügen, fügen Sie den unten gezeigten Code ein und kompilieren Sie. Legen Sie das neue Steuerelement oben in der Toolbox auf Ihrem Formular ab.

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 

Wenn Sie die Funktionstasten, egal zu arbeiten, welche Kontrolle über die Form den Fokus hat, dann sollten Sie die ProcessCmdKey Methode des Formulars überschreiben.