会員番号の入力処理
では、実際にマスクコントロールを使った入力フィールドを作成していきます。
最初は、会員番号を入力するフィールドです。ここでは、会員番号が「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プロパティに「*」文字が設定されているので、フォーム表示時は入力フィールドに「****」と表示されます。
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})
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行で記述することもできます。
//GcMask1の設定 gcMask1.Fields.AddRange("(MDJB|ZSEF|GDBC)");
6桁の数字の入力制限の設定
後ろに配置したGcMask2コントロールでは、会員番号の残りの6桁の数字の入力を設定します。これは、MaskPatternFieldオブジェクトを使用します。マスクのパターンは単純で、「入力データは数字」「最大文字数と最小文字数を6桁」と設定します。これで、数字以外の入力はできなくなり、さらに6桁以上の数字は入力できなくなります。
MaskPatternFieldオブジェクトは、コンストラクタを使用して作成します。引数には、データを表すキーワード(下表参照)と、最大文字数、最小文字数を指定します。作成したMaskPatternFieldオブジェクトは、先ほどのMaskEnumerationFieldオブジェクトと同様、AddRangeメソッドを使ってGcMaskコントロールに組み込みます。
'GcMask2の設定 Dim maskPatternField0 As MaskPatternField = New MaskPatternField("¥D", 6, 6) GcMask2.Fields.AddRange(New MaskField() {maskPatternField0})
//GcMask2の設定
MaskPatternField maskPatternField0 = new MaskPatternField("¥¥D", 6, 6);
gcMask2.Fields.AddRange(new MaskField[] {maskPatternField0});
また、以下のように1行で記述することもできます。
//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つしか作成しないで、それを配列にして設定するとエラーになってしまう点です。面倒でも設定する数だけ各オブジェクトを作成します。
'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})
//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行で記述することもできます。
//GcMask3の設定 gcMask3.Fields.AddRange("¥¥D{4}-¥¥D{4}-¥¥D{4}-¥¥D{4}");