書式を設定する |
このトピックでは、マスクコントロールの主要機能である入力フィールドの書式設定と、フィールドの活用方法について解説します。
マスクコントロールの入力領域はフィールドから構成されており、フィールドによって書式の設定やスタイルを定義することが可能です。フィールドを設定するには、Fields プロパティが参照する MaskFieldCollection を使用します。MaskFieldCollection は、コントロール内の各フィールドを表す MaskField のコレクションを保持するクラスです。
マスクコントロールの書式を設定するには、MaskFieldCollection の Add メソッドもしくは AddRange メソッドを使用して直接フィールドオブジェクトを追加する方法と、AddRange メソッドのオーバーライドの1つを使用して、キーワード文字列によりフィールドを自動生成する方法があります。それぞれの方法による書式の設定方法については、以下のトピックを参照してください。
フィールドコレクション内の特定のフィールドにアクセスする場合、Fields プロパティの引数としてそのフィールドのインデックス番号を指定します。
以下のサンプルコードは、インデックスを使ってフィールドを取得する例です。ここではマスクコントロールの3番目のフィールド(MaskPatternField フィールド)を取得します。インデックスは0から開始することに注意してください。
using GrapeCity.Windows.InputMan.Fields; // 3番目のフィールド(MaskPatternField フィールド)を取得します。 MaskPatternField myField = (MaskPatternField)GcMask1.FieldSet.Fields[2];
MaskPatternField と MaskEnumerationField には Activate メソッドが提供されています。この Activate メソッドを使用すれば、特定のフィールドにフォーカス(キャレット)を設定することができます。
以下のサンプルコードは、インデックスを使って取得した3番目のフィールドにキャレットを移動する例です。
フィールドには、フィールド間のキャレットの移動によって発生する2つのイベントが用意されています。
これらのイベントを使えば、フィールド毎に入力された値をチェックすることや、その値に応じた独自処理の実装など、フィールドを使った細やかな処理の実装を可能になります。
注意 |
---|
これらのイベントは、EnterEvent フィールドおよび LeaveEvent フィールドを使用して識別することができます。これらのフィールドを使うことでも、ユーザーは同様の処理を実装することが可能です。 フィールドクラスのイベントの場合、フィールド毎にイベントを実装する必要があることから、動的なフィールド操作や書式の仕様変更などに対しての処理が煩雑になる可能性があるため、フィールドクラスのイベントよりも EnterEvent フィールドおよび LeaveEvent フィールドを使うことが推奨されます。 |
以下のサンプルコードは、2つの列挙型フィールドを持ったマスクコントロールで、最初の列挙型フィールドの値に応じて2番目の列挙型フィールドの内容を変更する例です。
using System.Collections.ObjectModel; using System.Windows; using GrapeCity.Windows.InputMan; using GrapeCity.Windows.InputMan.Fields; ObservableCollection<StringItem> item1 = new ObservableCollection<StringItem> { "青森県", "岩手県", "秋田県", "宮城県", "山形県", "福島県" }; ObservableCollection<StringItem> item2 = new ObservableCollection<StringItem> { "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県" }; ObservableCollection<StringItem> item3 = new ObservableCollection<StringItem> { "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県" }; private void GcMask1_FieldLeave(object sender, GrapeCity.Windows.InputMan.Primitives.FieldEventArgs e) { MaskEnumerationField field = e.OriginalSource as MaskEnumerationField; // 最初の列挙型フィールドのとき、値に応じて2番目の列挙型フィールドの内容を変更します。 if(field == GcMask1.FieldSet.Fields[0]) { MaskEnumerationField mef2 = (MaskEnumerationField)GcMask1.FieldSet.Fields[2]; switch (field.Text) { case "東北": mef2.Items = item1; return; case "関東": mef2.Items = item2; return; case "中部": mef2.Items = item3; return; default: mef2.Items = null; return; } } }