CodeZine(コードジン)

特集ページ一覧

入力エラーを未然に防ぐ.NET アプリケーションを作る

InputMan for Windows Forms 5.0Jのマスクコントロール「GcMask」を使って、定型書式を入力時に設定したアプリケーションの作成

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/02/27 14:00
目次

会員番号の入力処理

 では、実際にマスクコントロールを使った入力フィールドを作成していきます。

 最初は、会員番号を入力するフィールドです。ここでは、会員番号が「MDJB」「ZSEF」「GDBC」という3つの英字4文字のいずれかが先頭につき、後は数字が6ケタ並ぶ形式の会員番号を入力することを想定してフィールドを設定します。

会員番号の入力サンプル
会員番号の入力サンプル

英字4文字の入力制限の設定

 最初のマスクコントロール「GcMask1」には、会員番号が「MDJB」「ZSEF」「GDBC」という3つの英字のいずれかしか入力できないようにします。このように設定すると、例えば「MDJB」であれば先頭の英字1文字「M」を入力すれば、残りの「DJB」3文字すべてを自動的に入力されるようになります。これで、「M」「Z」「G」以外の文字は入力できず、変な文字列が入力されることを未然に防ぐことができます。

 この設定は、MaskEnumerationFieldオブジェクトを作成し、これをGcMaskコントロールのFieldCollectionオブジェクトに追加する、という形をとります。MaskEnumerationFieldオブジェクトの作成はコンストラクタを使用します。引数は、マスクをかける文字列を配列にして設定します。

 作成したMaskEnumerationFieldオブジェクトは、FieldCollectionのAddRangeメソッドを使って組み込みます。このとき、MaskEnumerationFieldオブジェクトをMaskFieldオブジェクトにして組み込みます。コントロールには、あらかじめPromptCharプロパティに「*」文字が設定されているので、フォーム表示時は入力フィールドに「****」と表示されます。

Visual Basic
Imports GrapeCity.Win.Editors.Fields

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'GcMask1の設定
        Dim str As String() = {"MDJB", "ZSEF", "GDBC"}
        Dim maskEnumerationField1 As MaskEnumerationField = New MaskEnumerationField(str)
        GcMask1.Fields.AddRange(New MaskField() {maskEnumerationField1})
C#
using GrapeCity.Win.Editors.Fields;
namespace mymask_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //GcMask1の設定
            String[] str = {"MDJB", "ZSEF", "GDBC"};
            MaskEnumerationField maskEnumerationField1 = new MaskEnumerationField(str);
            gcMask1.Fields.AddRange(new MaskField[] {maskEnumerationField1});

 また、MaskEnumerationFieldインスタンスを生成せず、以下のように1行で記述することもできます。

C#
//GcMask1の設定
gcMask1.Fields.AddRange("(MDJB|ZSEF|GDBC)");

6桁の数字の入力制限の設定

 後ろに配置したGcMask2コントロールでは、会員番号の残りの6桁の数字の入力を設定します。これは、MaskPatternFieldオブジェクトを使用します。マスクのパターンは単純で、「入力データは数字」「最大文字数と最小文字数を6桁」と設定します。これで、数字以外の入力はできなくなり、さらに6桁以上の数字は入力できなくなります。

 MaskPatternFieldオブジェクトは、コンストラクタを使用して作成します。引数には、データを表すキーワード(下表参照)と、最大文字数、最小文字数を指定します。作成したMaskPatternFieldオブジェクトは、先ほどのMaskEnumerationFieldオブジェクトと同様、AddRangeメソッドを使ってGcMaskコントロールに組み込みます。

Visual Basic
'GcMask2の設定
Dim maskPatternField0 As MaskPatternField = New MaskPatternField("¥D", 6, 6)
GcMask2.Fields.AddRange(New MaskField() {maskPatternField0})
C#
//GcMask2の設定
MaskPatternField maskPatternField0 = new MaskPatternField("¥¥D", 6, 6);
gcMask2.Fields.AddRange(new MaskField[] {maskPatternField0});

 また、以下のように1行で記述することもできます。

C#
//GcMask2の設定
gcMask2.Fields.AddRange("¥¥D{6}");

 Patternプロパティで使用可能なキーワードと表現のタイプは次のとおりです。

使用可能なキーワード(主要なもの)
半角 全角 説明
¥A ¥A 大文字のアルファベットを表します。[A-Z]または[A-Z]と同等です
¥a ¥a 子文字のアルファベットを表します。[a-z]または[a-z]と同等です
¥D ¥D 数字を表します。[0-9]または[0-9]と同等です
¥B ¥B 2進数を表します。[0-1]または[0-1]と同等です
¥X ¥X 16進数を表します。[0-9A-Fa-f]または[0-9A-Fa-f]と同等です
¥W ¥W すべての英数字を表します。[a-zA-Z_0-9]または[a-zA-Z_0-9]と同等です
¥K ¥K カタカナ(促音・拗音の小書き表記あり)を表します
¥N ¥N カタカナ(促音・拗音の小書き表記なし)を表します
¥H - すべての半角文字を表します
- ¥J ひらがなを表します
- ¥Z すべての全角文字を表します
- ¥T サロゲートペア文字を表します
注意

 半角文字と全角文字は、その文字のShift-JISコードを使って識別されます。

表現のタイプ
表現のタイプ 説明
8進数(ASCII) ASCII文字を表現するときだけ使用します。「¥040」のように、頭に0をつけて必ず3桁の数値で表現します
16進数(ASCII) ASCII文字を表現するときだけ使用します。「¥x20」のように、¥xに続いて必ず2桁の数値(頭に0を付ける)で表現します
16進数(Unicode) すべての文字を表現できます。「¥u0020」のように、¥uに続いて必ず4桁の数値(頭に0を付ける)で表現します
キーワード 上の表で説明したキーワード(メタ文字)です
文字 キーワード以外の文字です

クレジットカード番号の入力処理

 今度は、クレジットカード番号の入力処理を作成します。この入力フィールドでは、入力した数字を「****-****-****-****」と4桁ずつ「-」記号で区切って表示できるように作成します。

 これには、MaskPatternFieldオブジェクトとMaskLiteralFieldオブジェクトを使用します。以下のようにMaskPatternFieldオブジェクトとMaskLiteralFieldオブジェクトを組み合わせてGcMaskコントロールに組み込んで作成します。

「4桁の数字入力」「-」「4桁の数字入力」「-」「4桁の数字入力」「-」「4桁の数字入力」

 MaskPatternFieldオブジェクトの作成は、会員番号の6桁の数字と同じように作成します。違うのは、最小文字数と最大文字数を4文字にするだけです。このオブジェクトを4つ作成します。

 また、「-」記号を入力フィールドに表示させるには、MaskLiteralFieldオブジェクトを作成します。作成は簡単で、MaskLiteralFieldオブジェクトのコンストラクタを使用し、引数に表示させる文字を指定するだけです。このオブジェクトは3つ作成します。作成したら、これらを配列にしてMaskFieldオブジェクトを作成し、AddRangeメソッドでGcMaskコントロールに組み込みます。

 ここで注意するのは、同じオブジェクトを1つしか作成しないで、それを配列にして設定するとエラーになってしまう点です。面倒でも設定する数だけ各オブジェクトを作成します。

Visual Basic
'GcMask3の設定
Dim maskPatternField1 As MaskPatternField = New MaskPatternField("¥D", 4, 4)
Dim maskLiteralField1 As MaskLiteralField = New MaskLiteralField("-")
Dim maskPatternField2 As MaskPatternField = New MaskPatternField("¥D", 4, 4)
Dim maskLiteralField2 As MaskLiteralField = New MaskLiteralField("-")
Dim maskPatternField3 As MaskPatternField = New MaskPatternField("¥D", 4, 4)
Dim maskLiteralField3 As MaskLiteralField = New MaskLiteralField("-")
Dim maskPatternField4 As MaskPatternField = New MaskPatternField("¥D", 4, 4)

' フィールドをコレクションに追加してコントロールに書式を設定します。 
GcMask3.Fields.AddRange(New MaskField() {maskPatternField1, _
                                         maskLiteralField1, _
                                         maskPatternField2, _
                                         maskLiteralField2, _
                                         maskPatternField3, _
                                         maskLiteralField3, _
                                         maskPatternField4})
C#
//GcMask3の設定
MaskPatternField maskPatternField1 = new MaskPatternField("¥¥D", 4, 4);
MaskLiteralField maskLiteralField1 = new MaskLiteralField("-");
MaskPatternField maskPatternField2 = new MaskPatternField("¥¥D", 4, 4);
MaskLiteralField maskLiteralField2 = new MaskLiteralField("-");
MaskPatternField maskPatternField3 = new MaskPatternField("¥¥D", 4, 4);
MaskLiteralField maskLiteralField3 = new MaskLiteralField("-");
MaskPatternField maskPatternField4 = new MaskPatternField("¥¥D", 4, 4);

// フィールドをコレクションに追加してコントロールに書式を設定します。 
gcMask3.Fields.AddRange(new MaskField[] {maskPatternField1, 
                                         maskLiteralField1,
                                         maskPatternField2,
                                         maskLiteralField2,
                                         maskPatternField3,
                                         maskLiteralField3,
                                         maskPatternField4});

 また、以下のように1行で記述することもできます。

C#
//GcMask3の設定
gcMask3.Fields.AddRange("¥¥D{4}-¥¥D{4}-¥¥D{4}-¥¥D{4}");

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 瀬戸 遥(セト ハルカ)

    8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

バックナンバー

連載:ComponentZine(InputMan)

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5