フォームで [Enter] キーが押された時にフォーカスを遷移させる
スポンサーリンク
汎用機のように [Enter] キーで入力フィールドを遷移させる方法です。この手の質問は、未だに多くの掲示板で見かけるゆえにやむなく Tips を書いております。初めに、これだけは頭に入れておいてください。
- Windows のフォーカス遷移は [Tab] キーである
- 実装しようとしている [Enter] キーには別の役割がある
- 汎用機の概念を Windows に持ち込むことは Windows の GUI を概念から壊すことである
そういうわけで、仕様を見直すことをお勧めします。しかしながら、お仕事の関係上やむを得ない場合は参考にしてください。
方法としては、フォームの KeyPreview を True にしてフォームで一括処理するのが楽かと思います。というよりは、各コントロールのキーイベントで実装すると、保守性が悪くなります。ちなみに、MultiLine なテキストボックスで改行を [Ctrl] + [Enter] で代用できるように考慮しています。
利用の際には KeyPreview を True にしておいてください。
サンプルコード
以下にサンプルコードを示します。
VB.NET 全般
' [Enter] キーで次の TabIndex があるコントロールへフォーカスを移す Private Sub Form1_KeyDown _ (ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If e.KeyCode = Keys.Enter Then If e.Control = False Then Me.SelectNextControl(Me.ActiveControl, Not e.Shift, True, True, True) End If End If End Sub ' フォーカス遷移後の音を消すためにキーイベントが処理されたことにする Private Sub Form1_KeyPress _ (ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If e.KeyChar = ControlChars.Cr Then e.Handled = True End If End Sub
関連するリファレンス
準備中です。