SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(InputMan)

VB.NETで入力エラーチェック機能を持ったフォームを作成する

InputMan for Windows Forms 5.0JのGcCommonValidatorコンポーネントを使ったデータ入力フォームの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

 GcCommonValidatorコンポーネントは、入力データを検証する便利なコンポーネントで、データ型のチェックだけでなくユーザー定義の文字列をチェックする機能まで持っています。  

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 Excelやデータベースの入力フォームを作成するとき、必ず入力データのエラーチェック機能を組み込みますが、いろいろなケースを考えてエラー処理を実装するのは意外と大変です。GcCommonValidatorコンポーネントは、入力データを検証する便利なコンポーネントで、データ型のチェックだけでなくユーザー定義の文字列をチェックする機能まで持っています。

 そこで、Excelのワークシートにデータを入力するフォームを作り、このGcCommonValidatorコンポーネントを使って入力データのエラーチェック機能を実装してみました。

指定された文字列と違うデータが入力されたり、入力がないのにコントロールのフォーカスがなくなると
指定された文字列と違うデータが入力されたり、入力がないのにコントロールのフォーカスがなくなると
アイコン、色、バルーンチップでエラー箇所を表示する
アイコン、色、バルーンチップでエラー箇所を表示する

対象読者

 Visual Basic 2005・2008を使ってプログラムを作ったことのある人。

必要な環境

 Visual Studio 2005・2008、Visual Basic 2005・2008でプログラムが作れる環境。なお、本プログラムはWindows Vista上で動作するVisual Studioを使用して作成し、動作確認を行っています。

プログラム実行時の注意事項

 InputMan for Windows Forms 5.0Jを使って作成したアプリケーションを配布する場合、InputMan for Windows Forms 5.0Jのアセンブリファイルを添付する必要があります。これは、Common Language RuntimeのDLLをアプリケーションと一緒に配布するのと同じです。アプリケーションを正常に動作させるためには、次の4つのファイルをインストールする必要があります。

  • GrapeCity.Framework.InputMan.v20.dll…フレームワークアセンブリ
  • GrapeCity.Win.Editors.V50.dll…本体コンポーネント
  • GrapeCity.Framework.InputMan.v20.resources.dll…フレームワークアセンブリのサテライトリソース
  • GrapeCity.Win.Editors.V50.resources.dll…本体コンポーネントのサテライトリソース

 これらのファイルを、プログラムを実行するBinフォルダに格納します。.NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。

 なお、本稿ではExcelのオブジェクトモデルをコードから操作しますので、C#を使うとコードがかなり煩雑になるため、Visual Basicでのコードのみの提供となります。

コンポーネントのインストール

 はじめてInputMan for Windows Forms 5.0Jを使用する方は、プロジェクトにInputMan for Windows Forms 5.0Jをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページの[申込フォーム]をクリックし、必要な情報を入力して送信すると、ダウンロードのURLが記載されたメールが送られてきますので、そこからダウンロードできます。

 有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 InputMan for Windows Forms 5.0Jをインストールしたら、ツールボックスに専用のタブを作成し、InputMan for Windows Forms 5.0Jコンポーネントを追加します。

 今回追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「GrapeCity.Win.Editors」で始まる名前空間のコンポーネント「GcCommonValidator」です。

「名前空間」が「GrapeCity.Win.Editors」で始まる名前空間のコンポーネント「GcCommonValidator」を選択する
「名前空間」が「GrapeCity.Win.Editors」で始まる名前空間のコンポーネント「GcCommonValidator」を選択する

GUIの作成とGcCommonValidatorコンポーネントについて

 フォームのデザインは、次のようなものです。

GUIのデザイン
GUIのデザイン

 フォームそのものは、標準コントロールのTextBox、Label、Buttonで構成していますが、フォームにGcCommonValidatorコンポーネントを組み込むと、次のプロパティが各コントロールに追加されます。

プロパティ 機能
UseDefaultValidateItems デフォルトの検証方法を利用するかどうかを設定
UseValidateActions デフォルトの通知方法を利用するかどうかを設定
ValidateItems 入力された値をどのように検証するかを設定
ValidateActions 入力値がエラーとなった時の通知の方法やフォーカスおよび入力値の処理方法を設定

 また、各コントロールのスマートタグに、次のメニューが追加されます。

  • 検証アイテム
  • 検証アクション

 検証アイテムは、コントロールに入力された値をどのように検証するかを定義するための機能です。必須入力、データタイプ、入力禁止文字など多くの検証オプションが使えるようになっています。

 検証アクションは、コントロールで検証した結果エラーが検出された場合の動作について設定するための機能です。アイコンで通知する、バルーンチップを表示する、フォーカスを固定する、などエラーをユーザーに通知する機能を提供します。また、不正値を保持したコントロールを取得できますので、プログラム側で入力エラーが発生していることを把握して処理することができます。

 このプログラムでは、フォームに入力したデータをExcelのワークシートに転送します。その際、事前にフォーム側で入力データのチェックを行い、正しいデータがワークシートに入力されるようにします。

検証アイテムと検証アクションの設定

 フォームに配置した4つのTextBoxコントロールに、検証アイテムと検証アクションを設定します。TextBoxコントロールは、次のような入力エラー処理を設定します。

GUIのデザイン

TextBox1の検証アイテムの編集

 TextBox1のスマートタグをクリックすると、「検証アイテムの編集」というメニューが追加されているので、これをクリックします。「検証アイテムの編集」ダイアログが表示されるので、「追加」「挿入」ボタンを使って、設定する検証アイテムを挿入します。

「検証アイテムの編集」ダイアログで検証アイテムを設定する
「検証アイテムの編集」ダイアログで検証アイテムを設定する

 設定できるアイテムと内容は次のものが使用できます。

項目 アイテム名 内容
必須入力 EmptyText 対象のコントロールのTextプロパティが空かどうかを検証する
コントロールのTextプロパティが空もしくはNullの場合は不正とみなされる
データタイプ InvalidType コントロールに入力された値が指定したデータ型に一致するかどうか検証する
文字列リスト IncludeList 文字列リストに設定した文字列のいずれかが入力されているかどうか検証する
入力された文字列がリスト内にない場合、不正とみなされる
禁止文字 ExcludeList 文字列リストに設定した禁止文字列が入力されていないか検証する
リスト内にある文字列が入力された場合、不正とみなされる
サロゲートペア文字 SurrogateChar JIS2004で追加されたサロゲートペア文字が入力されていないかどうかを検証する
正規表現 RegularExpression 入力された文字列を正規表現を使って検証する
ペア文字 InvalidPairChar カッコなどのペアとなる文字が両方存在するかどうかを検証する
数値範囲 InvalidNumberRange 入力された値が、指定した数値の範囲内の値かどうかを検証する
日付範囲 InvalidDateTimeRange 入力された値が、指定した日付の範囲内の値かどうかを検証する
他のコントロールと数値比較 NumberCompareControl 対象となるコントロールの値と数値を比較検証する
数値比較 NumberCompareValue 指定する数値と値を比較検証する
他のコントロールと日付比較 DateTimeCompareControl 対象となるコントロールの値と日付を比較検証する
日付値比較 DateTimeCompareValue 指定する日付値と値を比較検証する

 このTextBox1では、会員番号の先頭にある3文字の英字が、「SKD」と「JJ」の2種類の英字に一致しているかどうかを検証するようにしますので、IncludeListアイテムを設定します。このアイテムを追加し、プロパティ「Candidates」に文字列を入力すると、プログラム実行時は自動的にこの文字列とTextBoxへの入力内容が一致しているかどうかのチェックが行われます。

 また、TextBoxへの入力が空白のままになっているのはまずいので、これもEmptyTextアイテムを使用してチェックします。「InvalidMessage」プロパティにエラーメッセージを入力すると、プログラム実行時、このTextBoxが空白のまま他のコントロールにフォーカスが移動した場合、検証アクションに設定したアクションが実行されます。

プロパティ「Candidates」に設定する文字列を入力するエディタ
プロパティ「Candidates」に設定する文字列を入力するエディタ

TextBox1の検証アクションの編集

 IncludeListアイテムで設定した文字列と一致しない文字列が入力された場合、およびTextBoxへの入力が空白のままになっている場合に、TextBox1からフォーカスが移動したときに、どのようなアクションを行うのかを設定するのが「検証アクションの編集」です。

 この設定も、スマートタグに追加された「検証アクションの編集」メニューで行います。このメニューを選ぶと、「検証アクションの編集」ダイアログが表示されるので、「追加」「挿入」ボタンを使って、設定する検証アクションを挿入します。

「検証アクションの編集」ダイアログで検証アクションを設定する
「検証アクションの編集」ダイアログで検証アクションを設定する

 設定できるアイテムと内容は次のものが使用できます。

項目 アクション名 コントロールに入力された値が不正なときの動作
フォーカス制御 FocusProcess フォーカスを移動を禁止するかどうかを設定する
値の制御 ValueProcess 値(Textプロパティの値)をどのように処理するか設定する
アイコンによる通知 IconNotify ErrorProviderのようなアイコンでエラーの内容を通知する
音による通知 SoundNotify 音によってエラーを通知する
バルーンチップによる通知 TipNotify バルーンチップによってエラーを通知する
下線による通知 LineNotify 文字列に下線(波線)を表示してエラーを通知する
色による通知 ColorNotify コントロールの背景または前景色を変更してエラーを通知する

 TextBox1では、IconNotify、TipNotify、ColorNotifyの3つを使って、入力エラーがあることをユーザーに明示するようにしました。

TextBox1に設定した3つの検証アクション
TextBox1に設定した3つの検証アクション

TextBox2~TextBox4の検証アイテムと検証アクションの編集

 TextBox2では、4桁の数字を入力してもらうので、4桁以上の数字が入力されないように検証アイテムを設定します。これは、TextBoxコントロールのMaxLengthプロパティでも可能ですが、GcCommonValidatorコンポーネントでは入力数字の範囲をMaxValue・MinValueプロパティで設定できるようになっているので、4桁の数字なら何でも受けつけてしまわないようにしたい、という時に便利です。

 ここでは、MavValueを「9999」、MinValueを「1111」に設定しています。この範囲以外の数字が入力されると、不正入力となり検証アクションが実行されます。また、「InvalidType」を「Integer」に設定し、数字以外のデータ(文字や記号)が入力された場合もエラーになるようにします。

 TextBox2の残りの検証アイテムと、TextBox3、TextBox4の検証アイテムは「EmptyText」で、空白は受けつけないようにします。また、これら3つのTextBoxコントロールの検証アクションは、TextBox1と同様IconNotify、TipNotify、ColorNotifyの3つを設定しています。

入力フォームの処理

 入力フォームでは、Excelのインスタンスを作成し、新しいブックを追加してワークシートのセルにTextBoxコントロールの入力データを転送するという簡単なものです。

 Excelのインスタンスを使うので、ソリューションエクスプローラの「参照設定」でExcelへの参照を設定するのを忘れないでください。

「参照設定」でExcelへの参照を設定する
「参照設定」でExcelへの参照を設定する
Visual Basic
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With xl
            .Workbooks.Add()
            .Visible = True
        End With
    End Sub

    Private xl As New Microsoft.Office.Interop.Excel.Application()
    Dim cnt As Integer = 0

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' データ転送の処理
        With xl.ActiveWorkbook.Worksheets("sheet1")
            cnt += 1

            .Cells(cnt, 1).value = Me.TextBox1.Text + Me.TextBox2.Text
            .Cells(cnt, 2).value = Me.TextBox3.Text
            .Cells(cnt, 3).value = Me.TextBox4.Text
        End With
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Close()
    End Sub

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        xl.ActiveWorkbook.Close(False)
        xl.Quit()
    End Sub
End Class

まとめ

 エラー処理の作成は、以外と手間がかかるものですが、GcCommonValidatorコンポーネントを使用するといろいろな形で入力データのエラー処理を設定できます。

 エラーを視覚的にユーザーに提示できると、入力間違いを未然に防ぐことができますから、GcCommonValidatorコンポーネントを使ったエラー処理はかなり効果的だと言えるのではないでしょうか。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3479 2009/03/17 12:14

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング