はじめに
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」です。
GUIの作成とGcCommonValidatorコンポーネントについて
フォームのデザインは、次のようなものです。
フォームそのものは、標準コントロールのTextBox、Label、Buttonで構成していますが、フォームにGcCommonValidatorコンポーネントを組み込むと、次のプロパティが各コントロールに追加されます。
プロパティ | 機能 |
---|---|
UseDefaultValidateItems | デフォルトの検証方法を利用するかどうかを設定 |
UseValidateActions | デフォルトの通知方法を利用するかどうかを設定 |
ValidateItems | 入力された値をどのように検証するかを設定 |
ValidateActions | 入力値がエラーとなった時の通知の方法やフォーカスおよび入力値の処理方法を設定 |
また、各コントロールのスマートタグに、次のメニューが追加されます。
- 検証アイテム
- 検証アクション
検証アイテムは、コントロールに入力された値をどのように検証するかを定義するための機能です。必須入力、データタイプ、入力禁止文字など多くの検証オプションが使えるようになっています。
検証アクションは、コントロールで検証した結果エラーが検出された場合の動作について設定するための機能です。アイコンで通知する、バルーンチップを表示する、フォーカスを固定する、などエラーをユーザーに通知する機能を提供します。また、不正値を保持したコントロールを取得できますので、プログラム側で入力エラーが発生していることを把握して処理することができます。
このプログラムでは、フォームに入力したデータをExcelのワークシートに転送します。その際、事前にフォーム側で入力データのチェックを行い、正しいデータがワークシートに入力されるようにします。
検証アイテムと検証アクションの設定
フォームに配置した4つのTextBoxコントロールに、検証アイテムと検証アクションを設定します。TextBoxコントロールは、次のような入力エラー処理を設定します。
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が空白のまま他のコントロールにフォーカスが移動した場合、検証アクションに設定したアクションが実行されます。
TextBox1の検証アクションの編集
IncludeListアイテムで設定した文字列と一致しない文字列が入力された場合、およびTextBoxへの入力が空白のままになっている場合に、TextBox1からフォーカスが移動したときに、どのようなアクションを行うのかを設定するのが「検証アクションの編集」です。
この設定も、スマートタグに追加された「検証アクションの編集」メニューで行います。このメニューを選ぶと、「検証アクションの編集」ダイアログが表示されるので、「追加」「挿入」ボタンを使って、設定する検証アクションを挿入します。
設定できるアイテムと内容は次のものが使用できます。
項目 | アクション名 | コントロールに入力された値が不正なときの動作 |
---|---|---|
フォーカス制御 | FocusProcess | フォーカスを移動を禁止するかどうかを設定する |
値の制御 | ValueProcess | 値(Textプロパティの値)をどのように処理するか設定する |
アイコンによる通知 | IconNotify | ErrorProviderのようなアイコンでエラーの内容を通知する |
音による通知 | SoundNotify | 音によってエラーを通知する |
バルーンチップによる通知 | TipNotify | バルーンチップによってエラーを通知する |
下線による通知 | LineNotify | 文字列に下線(波線)を表示してエラーを通知する |
色による通知 | ColorNotify | コントロールの背景または前景色を変更してエラーを通知する |
TextBox1では、IconNotify、TipNotify、ColorNotifyの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への参照を設定するのを忘れないでください。
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コンポーネントを使ったエラー処理はかなり効果的だと言えるのではないでしょうか。