ロゴ(青) Excel/VBA Tips ロゴ(緑)


下記のドキュメントは Microsoft に帰属するものです

  Tips06: カレンダーコントロール色々 内から参考ドキュメントとしてリンクしている

        MSDN 「DTPicker コントロールの使い方」
           http://www.microsoft.com/japan/developer/library/VBCon98/vbconusingdatetimepickercontrol.htm

  というドキュメントが MSDNライブラリの改編に伴い行方不明になってしまいました。辛うじてGoogle
  キャッシュからすくい上げるのに間に合いましたので、臨時で当サイト内に保存する事としました。
  今後、当該ドキュメントが見つかり次第、当該ドキュメントへのリンクに戻し、本ページは削除する事と
  します。尚、コントロール外観の画像には、当AddinBoxで用意した画像を差し込んであります。
  ( AddinBox 管理人    2006/9/23 )

  [ 英語版  MSDN / Date and Time Picker ]

DTPicker コントロールの使い方

関連項目

DTPicker コントロールは、日付や時刻の情報を表示し、ユーザーが日付および時刻情報を変更するためのインターフェイスとして機能します。このコントロールのディスプレイは、コントロールの表示書式指定文字で定義されたフィールドで構成されています。DTPicker をドロップダウンすると、MonthView カレンダーが表示されます。

このコントロールには 2 つのモードがあります。

このコントロールを使用すると、日付の短い形式 (97/11/14)、日付の長い形式 (1997 年 11 月 14 日)、時刻の形式 (07:00:00) などさまざまな既定の形式で日時を表示できます。また、表示書式指定文字を使用してユーザー設定の形式を指定することや、コールバック フィールドを使用して独自の形式を作成することも可能です。

ドロップダウン カレンダー モードの DTPicker コントロール


時刻形式モードの DTPicker コントロール


用途

コントロールの 2 つのモードを使用する

DTPicker は、日付や時刻の値を入力するためのマスク エディット コントロールとして動作します。日付または時刻の各部分は、コントロールの編集場所において個別のフィールドとして扱われます。ユーザーが各フィールドを クリックすると、そのフィールドが強調表示され、上下の矢印キーを使用してフィールドの値を増分または減分できます。また、コントロールに値を直接入力す ることも可能です。

UpDown プロパティは、コントロールが入るモードを決定します。UpDown が偽 (False) に設定されている場合、コントロールはドロップダウン カレンダー モードに入ります (既定値)。UpDown プロパティが真 (True) に設定されている場合、DTPicker は時刻形式モードに入ります。

時刻形式モードでは、スクロール バーの矢印ボタンがコントロールの右側に 2 つ表示されます。これらの矢印をマウスでクリックすると、現在選択されているフィールドの値を増分または減分できます。ドロップダウン カレンダー モードでは、日付を選択するためのカレンダーがドロップダウンされます。

ドロップダウン カレンダーは、MonthView コントロールのほとんどの機能を保持しています。DTPicker コントロールのドロップダウン カレンダーのセットアップと書式化の方法については、「MonthView コントロールの使い方」を参照してください。

日付を設定および取得する

コントロールで現在選択されている日付は、Value プロパティによって決定されます。日付を表示する前に (デザイン時または Format_Load イベントの発生時などに) コントロールの Value を設定すると、コントロールで最初に選択される日付を決定できます。

DTPicker1.Value = "10/31/97"

既定値により、コントロールの Value は現在の日付に設定されます。DTPickerValue をコード内で変更すると、コントロールは自動的に更新され、新しい設定を反映します。

Value プロパティは、未処理の日付の値、または Null 値を返します。DTPicker コントロールには、表示されている日付について特定の情報を返すプロパティがいくつかあります。

Change イベントを使用すると、ユーザーがコントロールの日付の値を変更したときを判定できます。

チェック ボックスを使用して日付を取得しないよう設定する

CheckBox プロパティは、コントロールが日付を返すかどうかを指定します。既定値により、CheckBox は偽 (False) に設定され、コントロールは常に日付を返します。

日付を返さないように指定するには、CheckBox プロパティを真 (True) に設定します。たとえば、プロジェクトの完了日を入力するために DTPicker を使用しているにもかかわらずプロジェクトが完了していない場合などにこの機能を使用します。

CheckBox プロパティを真 (True) に設定すると、小さなチェック ボックスがコントロールの編集部分の日付と時刻の左側に表示されます。このボックスがチェックされていない場合、Value プロパティは Null の値を返します。ユーザーがこのチェック ボックスをチェックした場合、コントロールは Value プロパティを介して表示されている日付を返します。

日付と時間の書式を処理する

DTPicker を使用すると、コントロール内の日付と時刻の表示を極めて柔軟に書式化できます。すべての標準 Visual Basic 表示書式指定文字を使用することも、コールバック フィールドを使用してカスタム書式を作成することも可能です。

Format プロパティは、コントロールが未処理の日付値を書式化する方法を決定します。定義済みの書式オプションを選択することも、コントロールのカスタム書式機能を使用することも可能です。

CustomFormat プロパティは、コントロールの内容を表示する書式を定義します。ユーザーは、コントロールに対し日付出力の書式を指示する表示書式指定文字を指定します。DTPicker コントロールがサポートする表示書式指定文字は次のとおりです。

文字列 内容
d 日付を 1 桁または 2 桁で表示します。
dd 日付を 2 桁で表示します。1 桁の日付の前には 0 が付加されます。
ddd 3 文字による曜日の省略形です。
dddd 曜日名を完全に表示します。
h 12 時間形式の時間を 1 桁または 2 桁で表示します。
hh 12 時間形式の時間を 2 桁で表示します。1 桁の値の前には 0 が付加されます。
H 24 時間形式の時間を 1 桁または 2 桁で表示します。
HH 24 時間形式の時間を 2 桁で表示します。1 桁の値の前には 0 が付加されます。
m 分を 1 桁または 2 桁で表示します。
mm 分を 2 桁で表示します。1 桁の値の前には 0 が付加されます。
M 月を 1 桁または 2 桁で表示します。
MM 月を 2 桁で表示します。1 桁の値の前には 0 が付加されます。
MMM 3 文字による月の省略形です。
MMMM 月の名前を完全に表示します。
s 秒を 1 桁または 2 桁で表示します。
ss 秒を 2 桁で表示します。1 桁の値の前には 0 が付加されます。
t 1 文字による AM/PM の省略形です。つまり、"AM" は "A" で表示されます。
tt 2 文字による AM/PM の省略形です。つまり、"AM" は "AM" で表示されます。
X 表示フィールドのコントロールをプログラマに与えるコールバック フィールド (後述)。複数の X 文字を連続的に使用して、独自のコールバック フィールドを示すことができます。
y 年の最後の 1 桁を表示します。すなわち、1996 年は "6" で表示されます。
yy 年の最後の 2 桁を表示します。すなわち、1996 年は "96" で表示されます。
yyy 年を完全に表示します。すなわち、1996 年は "1996" で表示されます。

ボディ テキストを表示書式指定文字に追加できます。たとえば、現在の日付を "Today is: 05:30:31 Friday Nov 14, 1997" という書式で表示する場合、使用する表示書式指定文字は "'Today is: 'hh':'m':'s ddddMMMdd', 'yyy"となります。ボディ テキストはシングル クォーテーションで囲む必要があります。

コールバック フィールドを使用してカスタム書式を作成する

上記のカスタム書式フィールドの 1 つがコールバック フィールドです。コールバック フィールドを使用すると、表示書式指定文字の特定部分をコールバック フィールドとして指定することにより、出力をカスタマイズできます。コールバック フィールドを宣言するには、1 つまたは複数の 'X' 文字 (ASCII Code 88) を表示書式指定文字のボディのどこかに含める必要があります。コールバック フィールドは、左から順番に表示されます。

1 つまたは複数のコールバック フィールドを含む書式で新しい日付を表示する場合、Format および FormatSize イベントがコールバック フィールドごとに発生します。Format イベントを使用するとカスタム応答文字列を指定でき、FormatSize イベントを使用すると文字列を表示するための空間を決定できます。この機能により、コールバック フィールドの表示をすべてコントロールできます。

X の各シーケンスには固有の意味があります。たとえば、X は "1st" "2nd" "3rd" または "4th"のように "st/nd/rd/th" を意味し、XX は "first" "second" "third" または "fourth" を意味することがあります。これらのフィールドは、ユーザーのテキストを書式化しません。日付を表示可能な書式にします。

たとえば、次の書式で英語のほかにスペイン語で月を表示する場合を考えてみます。

July (Julio) 29

この場合、次のような表示書式指定文字を作成します。

MMMM XXXX d

Format および FormatSize イベントを処理するとき、入力表示書式指定文字と "XXXX" を比較することにより、どのコールバック フィールドが呼び出されるかをチェックできます。フィールド文字列が一致すると、出力文字列 "(Julio)" を作成し、出力文字列の長さを得ることができます。X の数は、コールバック フィールドに提供するテキストをアプリケーションが決定する目的でのみ使用されます。FormatSize イベントを処理する際には、テキストのサイズをプログラムを使って算出できます。

Format イベントは、コントロールがコールバック フィールドへの記入を必要とするたびに呼び出されます。たとえば、ユーザーがドロップダウン カレンダーのコールバック フィールドから異なる日付を選択するときなどに呼び出されます。しかし、FormatSize イベントは、表示書式指定文字に変更があった場合に限り呼び出されます。たとえば、XX から XXXX に変更された場合などです。そのため、FormatSize イベントにおいてコールバック フィールドのサイズを計算する場合、Format イベントが返す可能性のある値を考慮する必要があります。

たとえば、以下のプロセスを使用すると、前述の表示書式指定文字にコールバック フィールドをインプリメントできます。

  1. フォームの宣言セクションで、スペイン語の月名の検索テーブルを保有する配列変数を宣言できます。
    Private sSpMonth(11) As String
    
  2. フォームの Load イベントにおいて、検索テーブルに値を代入し、カスタム表示書式指定文字を使用するよう DTPicker を設定できます。
    sSpMonth(0) = "Enero"
    sSpMonth(1) = "Febrero"
    sSpMonth(2) = "Marzo"
    sSpMonth(3) = "Abril"
    sSpMonth(4) = "Mayo"
    sSpMonth(5) = "Junio"
    sSpMonth(6) = "Julio"
    sSpMonth(7) = "Agusto"
    sSpMonth(8) = "Septiembre"
    sSpMonth(9) = "Octubre"
    sSpMonth(10) = "Noviembre"
    sSpMonth(11) = "Diciembre"
    
    DTPicker1.Format = dtpCustom
    DTPicker1.CustomFormat = "MMMM (XXX) dd, yy"
    
  3. FormatSize イベントにおいて、戻り値のリストを検索し、最も長い値を探します。その値を表示書式指定文字の長さとして指定します。このように指定しておけば、コントロール内の値を変更しても、スペイン語の月名は末尾が欠けることなく表示されます。
    Private Sub DTPicker1_FormatSize(ByVal CallbackField As String, _
    Size As Integer)
    Dim iMaxMonthLen As Integer
    Dim iC As Integer
    Select Case CallbackField
    Case "XXX"
    iMaxMonthLen = 0
    For iC = 0 To 11
    If iMaxMonthLen < Len(sSpMonth(iC)) Then
    iMaxMonthLen = Len(sSpMonth(iC))
    End If
    Next iC
    End Select
    Size = iMaxMonthLen
    End Sub
    
  4. Format イベントにおいて、適切な値を表示書式指定文字として返します。
    Private Sub DTPicker1_Format(ByVal CallbackField As String,
    FormattedString As String)
    Select Case CallbackField
    Case "XXX"
    FormattedString = sSpMonth(DTPicker1.Month - 1)
    End Select
    End Sub
    

X 文字を繰り返すことにより、独自のコールバック フィールドを作成できます。そのため、表示書式指定文字 "XX dddd MMM dd', 'yyy XXX" は、2 つのコールバック フィールドを含みます。Select または If ステートメントを使用すると、Format および FormatSize イベントにおいて、複数のコールバック文字列を処理できます。

コールバック フィールドは有効なフィールドとして扱われるため、CallbackKeyDown イベントを処理するアプリケーションを用意する必要があります。このイベントを使用すると、コールバック フィールドにおいて個々のキーストロークを処理でき、キーストロークのバリデーションまたは自動入力を実行できます。たとえば、ユーザーが月名を D と入力した場合、CallbackKeyDown イベントを使用すると、ワード「December」がコールバック フィールドに入力されます。

カレンダー コントロールを書式化する

コントロールのドロップダウン カレンダーを書式化するオプションは多数用意されています。ワード「Calendar」が先頭に付いた DTPicker のすべてのプロパティは、ドロップダウン カレンダーの書式に影響します。これらのプロパティは、MonthView コントロールのプロパティに対応します。たとえば、DTPickerCalendarTitleTextColor プロパティは、MonthView の TitleTextColor プロパティと比較できます。カレンダーを書式化する問題については、トピック「MonthView コントロールの使い方」を参照してください。

キーボード インターフェイス

カレンダー コントロールは、キーボードで操作できます。次の表は、実行時にカレンダー コントロールに対し実行できるさまざまなアクションについて説明しています。

キー 内容
左隣のフィールドを選択します。左端のフィールドが選択されているときにこのキーが押された場合、右端のフィールドが選択されます。
右隣のフィールドを選択します。右端のフィールドが選択されているときにこのキーが押された場合、左端のフィールドが選択されます。
選択されているフィールドの値を増分します。
選択されているフィールドの値を減分します。
Home 選択されているフィールドの値をその上限に変更します。
End 選択されているフィールドの値をその下限に変更します。
選択されているフィールドの値を増分します。
選択されているフィールドの値を減分します。
テン キー上のプラス (+) 選択されているフィールドの値を増分します。
テン キー上のマイナス (-) 選択されているフィールドの値を減分します。

次の表は、ドロップダウン カレンダーが表示されている間に実行できるさまざまなアクションについて説明しています。

キー 内容
翌日を選択します。
前日を選択します。
先週の同じ曜日を選択します。
次週の同じ曜日を選択します。
Page Up 過去の月へ表示をスクロールします。
Page Down 将来の月へ表示をスクロールします。
Ctrl + Page Up 前年に表示をスクロールします。
Ctrl + Page Down 翌年に表示をスクロールします。

配布時の注意   DTPicker コントロールは、MSCOMCT2.OCX ファイルにある ActiveX コントロール グループの一部です。DTPicker コントロールを自分のアプリケーションで使用するには、プロジェクトに MSCOMCT2.OCX ファイルを追加する必要があります。自分のアプリケーションを配布する場合は、MSCOMCT2.OCX ファイルを、ユーザーの Microsoft Windows の System または System32 ディレクトリにセットアップする必要があります。ActiveX コントロールをプロジェクトに追加する方法の詳細については、「プログラミング ガイド」を参照してください。


©2001 Microsoft Corporation. All rights reserved. Terms of Use

ロゴ(ゴールド) ロゴ(ゴールド)

角田 桂一 Mail:addinbox@h4.dion.ne.jp