GcTimeSpanCellの主要機能である書式フィールドの設定とその活用方法について解説します
GcTimeSpanCellの書式には、入力用と表示用の2つがあり、それぞれ入力フィールドと表示フィールドを使って書式を設定します。
入力フィールドを設定するには、Fieldsプロパティが参照するTimeSpanFieldCollectionを使用します。TimeSpanFieldCollectionは、各入力フィールドを表すTimeSpanFieldのコレクションを保持するクラスです。
一方、表示フィールドを設定するには、DisplayFieldsプロパティが参照するTimeSpanDisplayFieldCollectionを使用します。TimeSpanDisplayFieldCollectionは、各表示フィールドを表すTimeSpanDisplayFieldのコレクションを保持するクラスです。
GcTimeSpanCellの書式を設定するには、それぞれのコレクションのAddメソッドもしくはAddRangeメソッドを使用して直接フィールドオブジェクトを追加する方法と、AddRangeメソッドのオーバーライドの1つを使用して、キーワード文字列によりフィールドを自動生成する方法があります。それぞれの方法による書式の設定方法については、以下のトピックを参照してください。
ShowLiteralsプロパティを使えば、入力中にリテラル文字列を表示するかどうかを指定できます。
リテラル文字とは、TimeSpanLiteralField(リテラルフィールド)で定義された文字列をそのまま表示する文字列をいいます。
また、リテラルフィールド以外のフィールドには、プロンプト文字を設定することができます。プロンプト文字を使用することで、入力フィールドを明示的に表示したり入力文字数を視覚的に表すことができます。 プロンプト文字はセルのPromptCharプロパティを使用して設定できます。なお、各フィールドのPromptCharプロパティを設定するとフィールドごとに異なるプロンプト文字も設定できます。
(図)プロンプト文字("_")
(図)時間と秒フィールドのみ異なるプロンプト文字("*")
GcTimeSpanCell.Fields プロパティまたは GcTimeSpanEditingControl.Fields プロパティのコレクションを通して特定のフィールドにアクセスできます。
フィールドコレクション内の特定のフィールドにアクセスする場合、次のいずれかの方法を使うことができます。
コレクションのインデックスがわかっている場合は、インデックスを使ってフィールドを取得することができます。
次のサンプルはインデックスを使ってフィールドを取得する例です。ここでは GcTimeSpanCell の3番目のフィールドを取得する例です。
Dim cell As GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell = DirectCast(GcMultiRow1.Rows(0).Cells(0), GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell) Dim myField As GrapeCity.Win.MultiRow.InputMan.TimeSpanField = cell.Fields(2)
GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell cell = (gcMultiRow1.Rows[0].Cells[0] as GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell);
GrapeCity.Win.MultiRow.InputMan.TimeSpanField myField = (GrapeCity.Win.MultiRow.InputMan.TimeSpanField)cell.Fields[2];
また、インデックスを使わず、設定したキー(文字列)を使って特定のフィールドにアクセスすることもできます。
キーは、各フィールドのNameプロパティにキーとして文字列を設定します。
次のサンプルはキーを使ってフィールドを取得する例です。ここではGcTimeSpanCellの特定のフィールドのNameプロパティに予め"Key1"という文字列が設定されていることを前提にしています。
Dim cell As GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell = DirectCast(GcMultiRow1.Rows(0).Cells(0), GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell) Dim myField As GrapeCity.Win.MultiRow.InputMan.TimeSpanField = cell.Fields("Key1")
GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell cell = (gcMultiRow1.Rows[0].Cells[0] as GrapeCity.Win.MultiRow.InputMan.GcTimeSpanCell); GrapeCity.Win.MultiRow.InputMan.TimeSpanField myField = (GrapeCity.Win.MultiRow.InputMan.TimeSpanField)cell.Fields["Key1"];
フィールド間のキャレットの移動を検出するには、GcTimeSpanEditingControl.FieldEnter および FieldLeave イベントを使用します。