マスクコンボコントロールの入力フィールドの設定とその活用方法について解説します。
マスクコンボコントロールの入力領域はフィールドから構成されており、フィールドによって書式の設定やスタイルを定義することが可能です。フィールドを設定するには、Fields プロパティが参照するMaskFieldCollection を使用します。MaskFieldCollection は、コントロール内の各フィールドを表すMaskField のコレクションを保持するクラスです。
マスクコンボコントロールの書式を設定するには、MaskFieldCollection のAdd メソッド、もしくはAddRange メソッドを使用して直接フィールドオブジェクトを追加する方法と、AddRange メソッドのオーバーライドの1つを使用して、キーワード文字列によりフィールドを自動生成する方法があります。それぞれの方法による書式の設定方法については、以下のトピックを参照してください。
マスクコンボコントロールの書式設定は、マスクコントロールと機能と共通です。ただし、マスクコンボコントロールには列挙体フィールドを設定することはできません。 |
マスクコンボコントロールは、リテラル文字列を設定し表示させることができます。リテラル文字とは、リテラルフィールド(MaskLiteralField クラス)で定義された文字列をそのまま表示する文字列をいいます。ShowLiterals プロパティを使えば、入力中にリテラル文字列を表示するかどうかを指定できます。
また、パターンフィールド(MaskPatternField クラス)には、プロンプト文字を設定することができます。プロンプト文字を使用することで、入力フィールドを明示的に表示したり入力文字数を視覚的に表すことができます。 プロンプト文字はコントロールのPromptChar プロパティを使用して設定します。なお、各パターンフィールドのPromptChar プロパティを設定するとフィールドごとに異なるプロンプト文字も設定できます。
(図)プロンプト文字("_")
(図)2つ目のパターンフィールドのみ異なるプロンプト文字("*")
AutoConvert プロパティをTrueに設定すると、Fields プロパティが参照するフィールドコレクションのパターンフィールド(MaskPatternField.Pattern)で設定された書式に基づいて、変換可能な文字はすべて自動的に変換されます。例えば、書式が \A{8} のように設定されていると、小文字を入力しても自動的に大文字に変換されます。また、全角文字だけが許可されている場合は、入力された半角文字は全角文字に変換されます。
コントロール内部で行われる自動変換の手順を以下に示します。
半角カタカナ、全角カタカナ、およびひらがなは、次のように変換されます。
Fields プロパティのパターンフィールドに"^\V"が設定された場合、IVS(Ideographic Variation Sequence)文字およびIVSの親となる漢字(以下、親字)は以下のように変換されます。
"^\V"(IVS文字を除外する) | |
---|---|
IVS | 親字に変換されます |
親字 | そのまま入力されます |
DefaultActiveField プロパティを使用すると、コントロールがフォーカスを受け取ったときにキャレットを配置するフィールドを指定できます。現在キャレットが置かれているフィールドは、ActiveField プロパティで取得できます。
フィールドコレクション内の特定のフィールドにアクセスする場合、次のいずれかの方法を使うことができます。
コレクションのインデックスがわかっている場合は、インデックスを使ってフィールドを取得することができます。
次のサンプルコードはインデックスを使ってフィールドを取得する例です。ここではマスクコンボコントロールの2番目のフィールドを取得する例です。
Dim MyField As GrapeCity.Win.Editors.Fields.MaskField = GcMaskComboBox1.Fields(2)
GrapeCity.Win.Editors.Fields.MaskField myField = gcMaskComboBox1.Fields[2];
また、インデックスを使わず、設定したキー(文字列)を使って特定のフィールドにアクセスすることもできます。 キーは、各フィールドのName プロパティにキーとして文字列を設定します。
次のサンプルコードはキーを使ってフィールドを取得する例です。ここではマスクコンボコントロールの特定のフィールドのName プロパティに予め"Key1"という文字列が設定されていることを前提にしています。
Dim MyField As GrapeCity.Win.Editors.Fields.MaskField = GcMaskedComboBox1.Fields("Key1")
GrapeCity.Win.Editors.Fields.MaskField myField = gcMaskedComboBox1.Fields["Key1"];
MaskPatternField クラスとMaskEnumerationField クラスにはFocus メソッドが提供されています。このFocus メソッドを使用すれば、特定のフィールドにフォーカス(キャレット)を設定することができます。
次のサンプルコードはキーを使って取得したフィールドをフォーカスする例です。上の例と同様、特定のフィールドのName プロパティに予め"Key1"という文字列が設定されていることを前提にしています。
Dim MyField As GrapeCity.Win.Editors.Fields.MaskField = GcMaskedComboBox1.Fields("Key1") MyField.Focus()
GrapeCity.Win.Editors.Fields.MaskField myField = gcMaskedComboBox1.Fields["Key1"];
myField.Focus();
コントロールには、フィールド間のキャレットの移動によって発生する2つのイベントが用意されています。
これらのイベントを使えば、フィールド毎に入力された値をチェックすることや、その値に応じた独自処理の実装など、フィールドを使った細やかな処理の実装を可能になります。
各フィールドクラスには、コントロールのFieldEnterとFieldLeaveと同様の機能を持つEnterとLeaveイベントが提供されています。これらのイベントを使うことでも、ユーザーは同様の処理を実装することが可能です。しかし、フィールドクラスのイベントの場合、フィールド毎にイベントを実装する必要があることから、動的なフィールド操作や書式の仕様変更などに対しての処理が煩雑になる可能性があることや、デザインウィンドウ上からイベントハンドラを生成できないことなどのデメリットがあるためフィールドクラスのイベントよりもコントロールのイベントを使うことが推奨されます。 |