こんにちは!現場でバリバリとWindows Formsアプリを組んでいると、避けて通れないのが「ユーザーの入力ミスとの戦い」ですよね。
「数字を入れるべきところに文字が入っている」「必須項目が空っぽのまま保存ボタンが押された」……。こうしたユーザーの“うっかり”を防ぎ、アプリの品質をぐっと引き上げるための必須テクニックが、ErrorProviderコンポーネントの活用です。
今回は、VB.NETのWindows Formsにおいて、ErrorProviderを使った「リアルタイムなエラー表示」と「送信前の一括チェック」をスマートに実現する方法を、実戦形式で優しく解説していきます。ここをクリアすれば、あなたの作るUIの信頼性は見違えるほど跳ね上がりますよ。
—
1. なぜ ErrorProvider なのか?(UI設計の極意)
初心者がやりがちな失敗として、「エラーがあったらその都度 `MessageBox.Show()` でポップアップを出す」という実装があります。これ、ユーザーの立場からすると、何度もOKボタンを押さなきゃいけない地獄のUIになってしまいますよね。
ErrorProviderは、コントロールのすぐ脇に「!」マークのアイコンをピタッと表示させ、マウスを重ねればエラーメッセージを吹き出しで教えてくれる優れものです。フォームのレイアウトを崩さず、直感的に「どこを直せばいいか」を伝えられるため、モダンな業務アプリには欠かせません。
—
2. 実装の全体像とデザイン配置
まずは、Visual Studioのデザイナ画面を使って準備をしましょう。
1. コントロールの配置
- テキストボックス:`txtName` (名前用・必須)
- テキストボックス:`txtAge` (年齢用・数値のみ必須)
- ボタン:`btnSubmit` (登録ボタン)
2. ErrorProviderの配置
- ツールボックスの「コンポーネント」タブから `ErrorProvider` をフォームにドラッグ&ドロップします。
- フォームの下部に `ErrorProvider1` として表示されます。
準備はこれだけです。それでは、魂を込めたコードを見ていきましょう。
—
3. 実装コード:リアルタイム検証と一括チェックの融合
以下のコードを、あなたのフォームのコードビハインド(`.vb` ファイル)に組み込んでみてください。
Public Class FormUserEntry
‘ —————————————————————–
‘ 1. 入力値変更イベント(リアルタイム検証)
‘ —————————————————————–
‘ 名前の入力チェック(空欄チェック)
Private Sub txtName_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtName.Validating
If String.IsNullOrWhiteSpace(txtName.Text) Then
‘ エラープロバイダにアイコンとメッセージを設定
ErrorProvider1.SetError(txtName, “氏名は必ず入力してください。”)
Else
‘ エラーをクリア
ErrorProvider1.SetError(txtName, “”)
End If
End Sub
‘ 年齢の入力チェック(数値かつ範囲チェック)
Private Sub txtAge_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtAge.Validating
Dim age As Integer
If String.IsNullOrWhiteSpace(txtAge.Text) Then
ErrorProvider1.SetError(txtAge, “年齢は必ず入力してください。”)
ElseIf Not Integer.TryParse(txtAge.Text, age) Then
ErrorProvider1.SetError(txtAge, “年齢は半角数字で入力してください。”)
ElseIf age < 0 OrElse age > 120 Then
ErrorProvider1.SetError(txtAge, “年齢は0から120の間で入力してください。”)
Else
‘ すべての関門を突破したらクリア
ErrorProvider1.SetError(txtAge, “”)
End If
End Sub
‘ —————————————————————–
‘ 2. 登録ボタンクリック(送信前の一括チェック)
‘ —————————————————————–
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
‘ フォーム上の全コントロールの Validating イベントを強制発動させる
If Not Me.ValidateChildren() Then
MessageBox.Show(“入力内容にエラーがあります。赤色のアイコンを確認してください。”,
“入力エラー”,
MessageBoxButtons.OK,
MessageBoxIcon.Warning)
Return
End If
‘ — ここから下がバリデーション成功時の処理 —
MessageBox.Show(“登録処理を完了しました!”,
“成功”,
MessageBoxButtons.OK,
MessageBoxIcon.Information)
‘ 実際の業務ではここでDB登録処理などを呼び出します
End Sub
End Class
—
4. コードの注目ポイントと知見の解説
初心者の方が「おっ」となるポイント、そして現場でハマりやすい罠をいくつか解説します。
① `Validating` イベントの魔法
Windows Formsのコントロールには、フォーカスが外れる(別の場所に移動する)タイミングで発生する `Validating` というイベントが用意されています。これを使うことで、ユーザーが文字を入力して次の項目へ進んだ瞬間に、「あ、ここ間違ってる!」と教えるリアルタイム検証が実現できます。
② `Me.ValidateChildren()` という最強のメソッド
「リアルタイムチェックは動くけど、ユーザーがいきなり『登録』ボタンを押したらどうなるの?」という疑問が湧きますよね。
そこでボタンのクリックイベントに `Me.ValidateChildren()` を仕込んでいます。これを行なうと、フォーム上に存在するすべてのコントロールの `Validating` イベントを強制的に一斉発動させ、一つでもエラー(アイコンが設定されている状態)があれば `False` を返してくれます。
これにより、「リアルタイム検証」と「送信前の一括チェック」の二段構えが完璧に成立します。
③ Integer.TryParse による安全な型変換
年齢のチェックで使っている `Integer.TryParse` は、VB.NETプログラマの必須アイテムです。文字を数字に変換しようとして失敗した際、例外(クラッシュ)を発生させずに `False` を返してくれるため、不正な入力に対して極めて安全に処理を分岐できます。
—
5. 陥りやすいエラーと回避のコツ
現場でよくあるトラブルシューティングを一つ。
- 「エラーが出ているのにボタンが押せてしまう!?」
- 原因: `Validating` イベント内でエラーを検知して `ErrorProvider` に文字を設定しても、それだけでは「ボタンのクリックを物理的に禁止する」ことにはなりません。
- 対策: 上記のコードのように、ボタンのクリックイベントの冒頭で必ず `If Not Me.ValidateChildren() Then Return` を書き、処理をストップさせるガード節を設けましょう。これがスマートな一括チェックのキモです。
—
おわりに:ここをクリアすれば基本はバッチリ!
今回は、ErrorProviderを用いたスマートな入力検証の仕組みを解説しました。
イベント駆動UIの仕組み(`Validating`のタイミングと `ValidateChildren` による一斉チェック)を理解できると、単に動くだけのコードから、「ユーザーに優しいプロ仕様のアプリケーション」へと一段階上のステージに上がることができます。
エラー処理は地味に見えますが、優れたシステムほど、この裏側の泥臭い入力チェックが美しく設計されています。ぜひあなたのプロジェクトにも取り入れて、ワンランク上のVB.NETプログラミングを楽しんでくださいね!
