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」で対応できます。
コメント