日付時刻/日付コントロールの入力可能な範囲が1年間の場合、年入力フィールドが非表示でも値のループを禁止したい
対象製品
InputMan for Windows Forms 8.0J
詳細
日付時刻および日付コントロールで、次の例のように入力可能な範囲を1年間に設定した場合、年入力フィールドを非表示にするとSpin.WrapプロパティがFalseであっても、スピン時に日付の値が12月と1月の間でループします。
[Visual Basic]
この動作は、次のようなコントロールの仕様によります。
この仕様により、スピン機能を使用すると、Spin.WrapプロパティがFalseであっても日付の値がループします。
上記の例において、12月と1月の間で値のループを禁止したい場合は、TextChangingイベントに以下の処理を実装します。
なお、e.Result.Containsメソッドに指定している文字列は、コントロールの入力書式が「MM/dd」の場合の例です。この文字列は、入力書式に応じて適切に設定する必要があります。
[Visual Basic]
[Visual Basic]
GcDateTime1.MaxDate = New DateTime(2015, 12, 31, 0, 0 ,0) GcDateTime1.MinDate = New DateTime(2015, 1, 1, 0, 0, 0) GcDateTime1.Fields.Clear() GcDateTime1.Fields.AddRange("MM/dd") GcDateTime1.Spin.Wrap = False[C#]
gcDateTime1.MaxDate = new DateTime(2015, 12, 31, 0, 0, 0); gcDateTime1.MinDate = new DateTime(2015, 1, 1, 0, 0, 0); gcDateTime1.Fields.Clear(); gcDateTime1.Fields.AddRange("MM/dd"); gcDateTime1.Spin.Wrap = false;
この動作は、次のようなコントロールの仕様によります。
- Spin.Wrapプロパティは、日付の値を入力可能な範囲内でループさせるかどうかを設定するもので、各入力フィールドの値のループを制御するためのプロパティではありません。
- 非表示に設定された入力フィールドの値は、スピン動作によって変化しません。
この仕様により、スピン機能を使用すると、Spin.WrapプロパティがFalseであっても日付の値がループします。
上記の例において、12月と1月の間で値のループを禁止したい場合は、TextChangingイベントに以下の処理を実装します。
なお、e.Result.Containsメソッドに指定している文字列は、コントロールの入力書式が「MM/dd」の場合の例です。この文字列は、入力書式に応じて適切に設定する必要があります。
[Visual Basic]
Private Sub GcDateTime1_TextChanging(sender As Object,e As TextChangingEventArgs) Handles GcDateTime1.TextChanging If GcDateTime1.Value.HasValue Then If GcDateTime1.Value.Value.Month = 1 And e.Result.Contains("12/") Then ' 1月から12月へのループを禁止します。 e.Cancel = True ElseIf GcDateTime1.Value.Value.Month = 12 And e.Result.Contains("01/") Then ' 12月から1月へのループを禁止します。 e.Cancel = True End If End If End Sub[C#]
private void gcDateTime1_TextChanging(object sender, TextChangingEventArgs e) { if (gcDateTime1.Value.HasValue) { if (gcDateTime1.Value.Value.Month == 1 && e.Result.Contains("12/")) { // 1月から12月へのループを禁止します。 e.Cancel = true; } else if (gcDateTime1.Value.Value.Month == 12 && e.Result.Contains("01/")) { // 12月から1月へのループを禁止します。 e.Cancel = true; } } }