【入門編】ErrorProviderコンポーネントによるスマートな入力検証:リアルタイムエラー表示とフォーム送信前の一括チェック実装 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

こんにちは!現場でバリバリと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プログラミングを楽しんでくださいね!

タイトルとURLをコピーしました