Enterキーで業務を加速させる!VB.NETのイベント制御を極める「極意」
こんにちは。現場で叩き上げられたエンジニアなら一度は直面する「Enterキーの壁」。
「Enterを押したら次の欄へ飛んでほしい」「数値しか打てないようにしたい」。これらは業務アプリのユーザビリティを左右する生命線です。
今回は、VBAから脱却し、VB.NETという「オブジェクト指向の海」へ漕ぎ出したあなたへ、KeyPressとKeyDownを使いこなすための知見を授けます。ここさえ押さえれば、あなたの作るUIは一気にプロ仕様に昇華します。
—
1. イベントの「役割分担」を知る
VB.NETのイベントには、発生する順番と役割があります。ここを混同していると、バグの温床になります。
- KeyDownイベント: キーが「押された瞬間」に発生。キーコード(EnterやTabなど)を判定するのに適しています。
- KeyPressイベント: 文字が「入力確定した瞬間」に発生。文字コード(A, B, 1, 2など)を判定し、入力を拒否する(キャンセルする)のに適しています。
極意:「キーの制御(移動など)」はKeyDown、「文字の選別(数値限定など)」はKeyPressで行うのが鉄則です。
—
2. Enterでフォーカスを次へ送る(KeyDownの活用)
Enterキーを押すと「ピッ」と警告音が鳴る……あの忌々しい挙動を止め、スマートに次の項目へ移動させましょう。
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
‘ Enterキーが押されたか判定
If e.KeyCode = Keys.Enter Then
‘ 警告音(ビープ音)を抑制
e.SuppressKeyPress = True
‘ 次のコントロールへフォーカスを移動
‘ SelectNextControl(開始点, 前方移動か, 子コントロールまで探すか, タブ順か, 警告音オフか)
Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
End If
End Sub
ここがポイント:
`e.SuppressKeyPress = True` を忘れないでください。これを書かないと、フォーカス移動後に「ピッ」という音が鳴り響き、現場のユーザーから「うるさい」と苦情が来ます。
—
3. 数値のみ入力を許可する(KeyPressの活用)
「全角数字が入って計算エラーになる」なんて事態は、開発者が未然に防ぐべきです。KeyPressイベントで文字を門前払いしましょう。
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
‘ 入力された文字が「数字」または「BackSpace(削除)」以外なら入力を無効化
If Not (Char.IsDigit(e.KeyChar) OrElse Char.IsControl(e.KeyChar)) Then
e.Handled = True
End If
End Sub
解説:
- `Char.IsDigit`: 数字かどうかを判定する神メソッド。
- `Char.IsControl`: BackSpaceなどの制御キーを許可するために必要。これがないと、打ち間違えた時に消せなくなります。
- `e.Handled = True`: 「私が処理しました(=このキー入力はなかったことにします)」という宣言です。
—
4. 陥りやすい罠:フォーカス移動の「落とし穴」
初学者がよくやるミスは、バリデーション(入力値チェック)とフォーカス移動の順序を間違えることです。
フォーカスが移動した後に「入力エラーです」とメッセージを出しても、ユーザーは「どこが間違っているの?」とパニックになります。
推奨されるフロー:
1. Validatingイベントを使う:フォーカスが外れる瞬間にチェックを行う。
2. ErrorProviderコンポーネントを使う:視覚的に「ここがダメだよ」と教える。
‘ 項目が空ならエラーアイコンを出す
Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If String.IsNullOrWhiteSpace(TextBox1.Text) Then
ErrorProvider1.SetError(TextBox1, “必須項目です!”)
Else
ErrorProvider1.SetError(TextBox1, “”)
End If
End Sub
—
先輩からのアドバイス:UI設計は「優しさ」です
プログラムを書くとき、つい「どう動かすか」に意識が向きがちですが、本当に大事なのは「ユーザーがいかにストレスなくデータを入力できるか」です。
- Enterでの移動は、ユーザーの右手の動きを最小限にする。
- 数値制限は、ユーザーの修正コストをゼロにする。
これらを組み込むだけで、あなたのVB.NETアプリケーションは「ただのツール」から「業務を支える相棒」に変わります。
最初は難しく感じるかもしれませんが、イベントの泡立ち(バブリング)と制御のタイミングさえ掴めば、怖いものはありません。一つひとつ、着実に自分のスキルにしていってくださいね。応援しています!
