VB.NETのFormで「Enter」キーでフォーカスを移動する

VB.NETのFORMは通常、「Tab」キーで次の「TabIndex」にフォーカスが移動する仕様となっています。

その理由は「Enter」キーには別の機能が備わっているからです。

「Enter」で「Tab」キーと同様にフォーカスを移動させることになると、「Enter」本来の機能を無効化することになります。

「Enter」本来の機能を無効化しても大きな問題は発生しないと思います。

事実、これまでに不満感じることはありませんでした。

「Enter」キーでフォーカスを移すコード

Formの「KeyDown」イベントに装備します。

Private Sub Form_KeyDown(sender As Object, e As 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

「KeyPreview」プロパティの有効化

先ほどのコードを装備して、実行しても「Enter」キーでフォーカスが移動しません。

コードを実行するに先立って「KeyPreview」プロパティを「有効」にしないと正常に動作しないのです。

次のコードはFormの「Load」イベントで「KeyPreview」プロパティを「有効」にする例です。

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
End Sub

「KeyPreview」プロパティを「有効」にすることで「Enter」でフォーカスの移動できるようになりました。

ビープ音の停止

このままですと「Enter」キーを押す度にビープ音が鳴ってしまいます。

イベントを強制的に発生させているためなので、キーイベントが処理されたことにしてしまいます。

Formの「KeyPress」イベントに装備します。

Private Sub Form_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
    If e.KeyChar = ControlChars.Cr Then
        e.Handled = True
    End If
End Sub

実装後のキーボード操作

「Enter」で次のTabIndexを持つコントロールに移動します。

「Shift」+「Enter」前のTabIndexを持つコントロールに移動します。

MultiLineのテキストボックスでの改行は「Ctrl」+「Enter」で対応できます。

VB.NETのお勉強の教材

VB.NET教材プログラミング初心者から中級者まで実戦に役立つ内容を分かりやすく解説しています。