2010-12-15 7 views
5

のVisual Studio 2010でタブコントロールにタブのキーボードショートカットを設定する簡単な方法はありますか?私が設定できるプロパティはありますか?WindowsフォームのTabControlのキーボードショートカットを設定するにはどうすればよいですか?

私がオンラインに見えたが、私が見たすべての記事は非常に混乱しました。

+1

Windows Formsアプリですか? ASP.NET? WPF?コントロールのサードパーティライブラリ –

+0

WindowsフォームアプリケーションはVBでコードを使用しています。 – chama

+1

なぜこれはまだ閉じていないのですか?あなたは他になにか必要ですか? –

答えて

5

は残念ながら、そこにそのようなプロパティではありませんが、この機能を実装することはどちらか、困難である必要はありません。アプリケーションの設計によっては、考慮する価値のある方法が2つあります。

  1. TabControlをホストするフォームが既にメニューシステムを使用している場合、それを設定することはほぼ自明です。まず、あなたはTabControlの各TabPageに切り替わりメニューコマンドを追加する必要があります。次に、そのメニュー項目(MenuItem/ToolStripMenuItem)のキーボードショートカットを追加するだけで、そのキーが押されるたびにそのメニューコマンドが実行され、適切なTabPageに切り替わります。

  2. ただし、メニューシステムは、すべてのフォームに適切ではないかもしれません。そのような場合は、もう少し作業をしなければならなくなります。基本的に、あなたは、タブを切り替えるために使用するキーボードショートカットをTrueにごTabControlをホストするフォームのKeyPreviewプロパティを設定して検出する必要があります。

    フォームのKeyPreview propertyを設定すると、そのイベントがフォーカスを持つコントロールに渡される前にそのフォームがキーイベントを受け取ることができます。これは、フォームのKeyDownイベントハンドラのコードが、トラップしたいキーストロークを決して検出しないため、このメソッドが機能するためには非常に重要です。フォームが各キーストロークの処理を終了した後でなければ、通常はフォームを受け取るコントロールに渡されます。

    このプロパティを設定したら、使用するキーボードショートカットを監視するフォームのKeyDown eventのハンドラにコードを追加し、それらのキーのいずれかが検出された場合にタブを切り替えますが押された。それ以外の場合は、何もする必要はありません。あなたは、フォーム上の3 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()メソッドをオーバーライドすることができます。このようにすることの大きな利点は、タブコントロールまたはタブページのコントロールの1つにフォーカスがある場合にのみキーストロークが機能することです。 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メソッドをオーバーライドする必要があります。

関連する問題