GrapeCity InputMan for Windows Forms 10.0J
日付部分の扱い

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

時刻を扱うデータ型

時刻コントロールの時刻データを扱う以下のプロパティは、DateTime型ではなくTimeSpan型として提供されます。よって日付部分の設定は不要です。

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

書式の設定

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

入力範囲の指定

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

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

時刻コントロールでは、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
    ' 最大値と最小値を設定します。 
    GcTime1.MaxValue = New TimeSpan(18, 0, 0)
    GcTime1.MinValue = New TimeSpan(12, 0, 0)

    ' 範囲外の場合に値をどのように制御するかを設定します。 
    GcTime1.MaxMinBehavior = MaxMinBehavior.CancelInput
End Sub

Private Sub GcTime1_InvalidInput(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GcTime1.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)
{
    // 最大値と最小値を設定します。 
    gcTime1.MaxValue = new TimeSpan(18, 0, 0);
    gcTime1.MinValue = new TimeSpan(12, 0, 0);

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

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

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

時刻検証コンポーネントを使用

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

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

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

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

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

未入力時に表示する代替テキスト

AlternateText プロパティを使用すれば、コントロールが未入力(Value)のときに代わりに表示するテキストを文字列として設定することができます。


(図) 代替テキストを表示した時刻コントロール

AlternateTextプロパティは、TimeAlternateText オブジェクトを参照します。 コントロールにフォーカスがあるときのテキストを設定するには、TimeAlternateText クラスのNull プロパティを、 コントロールにフォーカスがないときのテキストを設定するには、DisplayNull プロパティを使用します。 これらのプロパティはAlternateText クラスを参照し、次の2つを設定することができます。

次のサンプルコードは、代替テキストを設定する例です。

' フォーカスがないときの代替テキスト
GcTime1.AlternateText.DisplayNull.Text = "退勤時刻を入力してください"
GcTime1.AlternateText.DisplayNull.ForeColor = Color.Coral

' フォーカスがあるときの代替テキスト
GcTime1.AlternateText.Null.Text = "直帰は00:00を入力"
GcTime1.AlternateText.Null.ForeColor = Color.LimeGreen
// フォーカスがないときの代替テキスト
gcTime1.AlternateText.DisplayNull.Text = "退勤時刻を入力してください。";
gcTime1.AlternateText.DisplayNull.ForeColor = Color.Coral;

// フォーカスがあるときの代替テキスト
gcTime1.AlternateText.Null.Text = "直帰は00:00を入力";
gcTime1.AlternateText.Null.ForeColor = Color.LimeGreen;
非表示に設定したフィールドのデフォルト値

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

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

' キーワードから書式を設定します。
GcTime1.Fields.AddRange("HH:mm")
' RecommendedValueプロパティに非表示フィールドのデフォルト値を設定します。
GcTime1.RecommendedValue = New TimeSpan(23, 59, 59)
' ValueプロパティにNothingを設定します。
GcTime1.Value = Nothing
// キーワードから書式を設定します。
gcTime1.Fields.AddRange("yyyy/MM");
// RecommendedValueプロパティに非表示フィールドのデフォルト値を設定します。
gcTime1.RecommendedValue = new TimeSpan(23, 59, 59);
// Valueプロパティにnullを設定します。
gcTime1.Value = null;

RecommendedValue プロパティの値がデフォルト値として設定されるのは、時刻部分の非表示フィールドです。時刻コントロールのValue プロパティは TimeSpan型で提供されるため、日付部分は保持していません。

参照

 

 


© 2004 GrapeCity inc. All rights reserved.