VB.NETフォームで [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

関連するリファレンス

準備中です。

スポンサーリンク