MESCIUS InputMan for Windows Forms 12.0J
時刻部分の扱い

日付コントロールは、日付部分の入力に特化したコントロールです。日付時刻コントロールで日付部分のみを入力するためには、書式や非表示部分の初期値などを個別に設定する必要がありますが、日付コントロールでは時刻部分を意識せず日付のみを扱うことが可能です。

ここでは日付コントロールの使用において、日付時刻コントロールとは異なる部分を解説します。

DateTime 型の時刻部分の扱い

日付コントロールでは、時刻部分の設定は不要です。以下のプロパティではDateTime 型が使用されますが、いずれも時刻部分の設定は次のように固定されています。

プロパティ名 時刻部分の値
MaxValue 23:59:59
MinValue 00:00:00
RecommendedValue 00:00:00
Value 00:00:00

日付時刻コントロールで最大日付、最小日付を設定するプロパティはMaxDate、MinDate プロパティですが、日付コントロールではこれらをMaxValue、MinValue プロパティと名称を変更しています。機能はMaxDate、MinDate プロパティと同じです。

また、Number プロパティについても、時刻部分は「00:00:00」を長整数型で表すため、yyyyMMdd000000形式の値となります。

書式の設定

日付コントロールには時刻部分に関する書式は設定できません。時刻を扱いたい場合には、日付時刻コントロール、もしくは時刻コントロールを使用します。書式設定の詳細については「書式の設定」を参照してください。

入力範囲の指定

日付コントロールで入力可能な範囲の指定を指定するには、コントロールのプロパティを使用する方法と、日付検証コンポーネントを使用する方法があります。いずれも時刻部分の設定は行いません。

コントロールのプロパティを使用

日付コントロールでは、MaxValue プロパティとMinValue プロパティを使用して入力可能な日付範囲を設定します。

これらのプロパティを使用する場合、検証は入力中のリアルタイムに行われます。全てのフィールドの値が入力されると検証が行われ、範囲外の日付の場合にはMaxMinBehavior プロパティの設定によって、値が制御されます。 MaxMinBehavior プロパティに設定できる値は以下のとおりで、既定値はMaxMinBehavior.AdjustToMaxMin です。

MaxMinBehaviorの値 説明
AdjustToMaxMin 値を最小値か最大値の近い方に設定します。
Clear 値を削除してnullにします。
Restore 変更前の値に戻します。
CancelInput 最後の入力をキャンセルしてフォーカスを保持します。
Keep エラーとなったTextプロパティの値を保持します。

MaxMinBehavior プロパティをMaxMinBehavior.CancelInput に設定した場合、範囲外の日付の最後の入力を行った時点でInvalidInput イベントが発生します。 InvalidInput イベント側では入力された日付が範囲外であることを取得できるため、メッセージを出力するなどのカスタマイズが可能です。 以下のサンプルコードは、範囲外の日付が入力されたとき、メッセージボックスを表示する例です。

Imports GrapeCity.Win.Editors

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' 最大日付と最小日付を設定します。 
    GcDate1.MaxValue = DateTime.Parse("2100/12/31")
    GcDate1.MinValue = DateTime.Parse("2000/1/1")

    ' 範囲外の場合に値をどのように制御するかを設定します。 
    GcDate1.MaxMinBehavior = MaxMinBehavior.CancelInput
End Sub
        
Private Sub GcDate1_InvalidInput(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GcDate1.InvalidInput
    Dim InvalidInputEventArgs As InvalidInputEventArgs = TryCast(e, InvalidInputEventArgs)
    If InvalidInputEventArgs Is Nothing Then
        Exit Sub
    End If

        ' 値が範囲外の場合には、メッセージを表示します。 
    If InvalidInputEventArgs.ValueOutOfRange Then
            MessageBox.Show("範囲外の値です。")
    End If
End Sub
using GrapeCity.Win.Editors;

private void Form1_Load(object sender, EventArgs e)
{
    // 最大日付と最小日付を設定します。 
    gcDate1.MaxValue = DateTime.Parse("2100/12/31");
    gcDate1.MinValue = DateTime.Parse("2000/1/1");

    // 範囲外の場合に値をどのように制御するかを設定します。 
    gcDate1.MaxMinBehavior = MaxMinBehavior.CancelInput;
}

private void gcDate1_InvalidInput(object sender, EventArgs e)
{
    InvalidInputEventArgs invalidInputEventArgs = e as InvalidInputEventArgs;
    if (invalidInputEventArgs == null)
    {
        return;
    }

    // 値が範囲外の場合には、メッセージを表示します。 
    if (invalidInputEventArgs.ValueOutOfRange)
    {
        MessageBox.Show("範囲外の値です。");
    }
}

日付検証コンポーネントを使用

日付検証コンポーネントを使用して、日付コントロールに入力可能な日付範囲を指定することができます。検証コンポーネントを利用した場合、範囲外の日付のときに値の制御を行うだけではなく、エラーアイコンを表示したり背景色を変更したりと柔軟なエラー通知機能を利用することが可能です。

検証コンポーネントを利用して入力範囲の検証を行う場合には、以下のいずれかの設定を行う必要があります。

この設定を行わない場合、日付コントロールの入力中に行う検証機能が動作し、検証コンポーネントによる検証が行われません。

日付検証コンポーネントを利用して入力可能な範囲を設定するには、GcDateValidator.InvalidRange クラスを使用し、GcDateValidator.InvalidRange クラスのMaxValue およびMinValue プロパティで、最大日付および最少日付を指定します。

日付検証コンポーネントを使用した範囲設定やエラー通知の詳細については「検証コンポーネント」を参照してください。

非表示に設定したフィールドのデフォルト値

日付コントロールの非表示に設定されたフィールドのデフォルト値には、RecommendedValue プロパティの値が設定されます。非表示フィールドの値は通常、Value プロパティから取得しますが、Value プロパティがnull 参照 (Visual Basic では Nothing)の場合は、RecommendedValue プロパティに設定された値を非表示フィールドに設定します。
RecommendedValue プロパティの既定値はnull 参照 (Visual Basic では Nothing)です。この場合、デフォルト値にはアプリケーション実行後に値がクリアされた日付が設定されます。

以下のサンプルコードでは、年月だけの入力を許可してRecommendedValue プロパティにデフォルト値を設定しています。この場合、年月の入力が行われると、非表示になっている日の部分には、RecommendedValue プロパティに設定された日の値が設定されます。

' キーワードから書式を設定します。
GcDate1.Fields.AddRange("yyyy/MM")
' RecommendedValueプロパティに非表示フィールドのデフォルト値を設定します。
GcDate1.RecommendedValue = New DateTime(2100, 1, 1)
' ValueプロパティにNothingを設定します。
GcDate1.Value = Nothing
// キーワードから書式を設定します。
gcDate1.Fields.AddRange("yyyy/MM");
// RecommendedValueプロパティに非表示フィールドのデフォルト値を設定します。
gcDate1.RecommendedValue = new DateTime(2100, 1, 1);
// Valueプロパティにnullを設定します。
gcDate1.Value = null;

RecommendedValue プロパティの値がデフォルト値として設定されるのは、日付部分の非表示フィールドです。日付コントロールのValue プロパティの時刻部分は常に「0:00:00」です。

関連トピック

 

 


© MESCIUS inc. All rights reserved.