GcDateTimeCellの主要機能である書式フィールドの設定とその活用方法について解説します。
GcDateTimeCellの書式には、入力用と表示用の2つがあり、それぞれ入力フィールドと表示フィールドを使って書式を設定します。
入力フィールドを設定するには、Fieldsプロパティが参照するDateTimeFieldCollectionクラスを使用します。DateTimeFieldCollectionは、セル内の各フィールドを表すDateFieldのコレクションを保持するクラスです。
一方、表示フィールドを設定するには、DisplayFieldsプロパティが参照するDateTimeDisplayFieldCollectionを使用します。DateTimeDisplayFieldCollectionは、セル内の各フィールドを表すDateDisplayFieldのコレクションを保持するクラスです。
GcDateTimeCellの書式を設定するには、それぞれのコレクションのAddメソッドもしくはAddRangeメソッドを使用して直接フィールドオブジェクトを追加する方法と、AddRangeメソッドのオーバーライドの1つを使用して、キーワード文字列によりフィールドを自動生成する方法があります。それぞれの方法による書式の設定方法については、以下のトピックを参照してください。
ShowLiteralsプロパティを使えば、入力中にリテラル文字列を表示するかどうかを指定できます。
リテラル文字とは、DateLiteralField(リテラルフィールド)で定義された文字列をそのまま表示する文字列をいいます。
また、リテラルフィールド以外のフィールドには、プロンプト文字を設定することができます。プロンプト文字を使用することで、入力フィールドを明示的に表示したり入力文字数を視覚的に表すことができます。 プロンプト文字はセルのPromptCharプロパティを使用して設定できます。なお、各フィールドのPromptCharプロパティを設定するとフィールドごとに異なるプロンプト文字も設定できます。
(図)プロンプト文字("_")
(図)月と分フィールドのみ異なるプロンプト文字("*")
InputManCellでサポートされません。
DefaultActiveFieldプロパティを使用すると、セルがフォーカスを受け取ったときにキャレットを配置するフィールドを指定できます。現在キャレットが置かれているフィールドは、GcDateTimeEditingControl.ActiveFieldプロパティで取得できます。
フィールドコレクション内の特定のフィールドにアクセスする場合、次のいずれかの方法を使うことができます。
コレクションのインデックスがわかっている場合は、インデックスを使ってフィールドを取得することができます。
次のサンプルはインデックスを使ってフィールドを取得する例です。ここでは GcDateTimeCell の3番目のフィールドを取得する例です。
Dim cell As GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell = DirectCast(GcMultiRow1.Rows(0).Cells(0), GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell) Dim MyField As GrapeCity.Win.MultiRow.InputMan.DateField = cell.Fields(2)
GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell cell = (GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell)gcMultiRow1.Rows[0].Cells[0]; GrapeCity.Win.MultiRow.InputMan.DateField myField = cell.Fields[2];
また、インデックスを使わず、設定したキー(文字列)を使って特定のフィールドにアクセスすることもできます。
キーは、各フィールドのNameプロパティにキーとして文字列を設定します。
次のサンプルはキーを使ってフィールドを取得する例です。ここでは GcDateTimeCell の特定のフィールドのName プロパティに予め"Key1"という文字列が設定されていることを前提にしています。
Dim MyField As GrapeCity.Win.MultiRow.InputMan.DateField = DirectCast(GcMultiRow1.CurrentCell, GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell).Fields("Key1")
GrapeCity.Win.MultiRow.InputMan.DateField myField = (gcMultiRow1.CurrentCell as GrapeCity.Win.MultiRow.InputMan.GcDateTimeCell).Fields["Key1"];
フィールド間のキャレットの移動を検出するには、GcDateTimeEditingControlのフィールド間のキャレットの移動によって発生する次の2つのイベントが使用します。
これらのイベントを使えば、フィールド毎に入力された値をチェックすることや、その値に応じた独自処理の実装など、フィールドを使った細やかな処理の実装を可能になります。