のVisual Studio 2010でタブコントロールにタブのキーボードショートカットを設定する簡単な方法はありますか?私が設定できるプロパティはありますか?WindowsフォームのTabControlのキーボードショートカットを設定するにはどうすればよいですか?
私がオンラインに見えたが、私が見たすべての記事は非常に混乱しました。
のVisual Studio 2010でタブコントロールにタブのキーボードショートカットを設定する簡単な方法はありますか?私が設定できるプロパティはありますか?WindowsフォームのTabControlのキーボードショートカットを設定するにはどうすればよいですか?
私がオンラインに見えたが、私が見たすべての記事は非常に混乱しました。
は残念ながら、そこにそのようなプロパティではありませんが、この機能を実装することはどちらか、困難である必要はありません。アプリケーションの設計によっては、考慮する価値のある方法が2つあります。
TabControl
をホストするフォームが既にメニューシステムを使用している場合、それを設定することはほぼ自明です。まず、あなたはTabControl
の各TabPage
に切り替わりメニューコマンドを追加する必要があります。次に、そのメニュー項目(はMenuItem
/ToolStripMenuItem
の)のキーボードショートカットを追加するだけで、そのキーが押されるたびにそのメニューコマンドが実行され、適切なTabPage
に切り替わります。
ただし、メニューシステムは、すべてのフォームに適切ではないかもしれません。そのような場合は、もう少し作業をしなければならなくなります。基本的に、あなたは、タブを切り替えるために使用するキーボードショートカットを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
カスタムショートカットキーストロークを実装するために、コントロールの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メソッドをオーバーライドする必要があります。
Windows Formsアプリですか? ASP.NET? WPF?コントロールのサードパーティライブラリ –
WindowsフォームアプリケーションはVBでコードを使用しています。 – chama
なぜこれはまだ閉じていないのですか?あなたは他になにか必要ですか? –