2017年4月4日火曜日

VB.NET Formで「Enter」キーが押されたらフォーカスを移動する

「Enter」キーで「Tab」キーと同様にフォーカスを移動する

通常は「Tab」キーで次の「TabIndex」にフォーカスが移動する使用となっています
「Enter」キーには別の機能が備わっています
「Enter」で「Tab」キーと同様にフォーカスを移動させることになると、「Enter」キーの機能を無効化することになるので、理解しておいて下さい

「Enter」キーで次のTabIndexを持つコントロールにフォーカスを移すコード

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」イベントに装備することをお勧めします
Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
End Sub
「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」キーの動作

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

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