PowerTools MultiRow for Windows Forms 8.0J
休日の設定

ドロップダウンカレンダーで休日を設定する方法について解説します。なお、休日と休日スタイルが定義されたXMLファイルをインポートして休日を設定することも可能です。定義ファイルについては「祝日定義ファイル」を参照してください。

概要の説明

ドロップダウンカレンダーの休日設定は、HolidayStylesプロパティが参照するHolidayStyleCollectionを初めとする下図のオブジェクト(着色された9つ)を使って行います。


HolidayStyleCollectionコレクションには、複数の休日スタイル(複数の休日からなる集合体)を保持できます。たとえば、「国民の祝日」、「会社の休日」、「個人の休日」などを休日スタイルとして登録することで、休日を種類ごとに管理できるようになります。

休日スタイルを設定するHolidayStyleオブジェクトは、そのHolidaysプロパティを経由して、複数の休日を保持するHolidayCollectionにアクセスします。たとえば、「国民の祝日」と名づけた休日スタイルが参照するHolidayCollection には、「1月1日、1月15日、2月11日、・・・」などの休日が含まれることになります。

Holidayオブジェクトは、休日そのものを指定するために用意されています。国民の祝日のように1日だけの休日のほかに、会社の夏期休暇などのように期間を指定した休日も設定できます。

DayOfWeekHolidayオブジェクトもHolidayオブジェクト同様、休日そのものを指定するために用意されています。Holiday オブジェクトとの違いは、ハッピーマンデーと呼ばれる成人の日、海の日、敬老の日、体育の日のように特定の月において特定の週の月曜日が祝日になるような場合に使用することができます。

ForceHolidayオブジェクトは、Holidayオブジェクトと同じように休日を指定するためのものですが、Holidayオブジェクトの休日は毎年繰り返される永続的なものなのに対し、ForceHolidayオブジェクトの休日は特定の年にだけ適用される一時的なものという違いがあります。

ForceWorkdayオブジェクトは、Holidayオブジェクトの設定に関わらず、特定の日を強制的に営業日にするときに使用します。この営業日も、ForceHolidayオブジェクトの休日と同じように、特定の年に対してのみ設定することができます。

ForceDayOfWeekHolidayオブジェクトは、ForceHolidayオブジェクトと同様に特定の年にだけ適用される一時的な休日を設定しますが、特定の月、週、曜日が休日になるような場合に使用することができます。

ForceDayOfWeekWorkdayオブジェクトは、ForceWorkdayオブジェクトと同様に特定の日を強制的に営業日にするときに使用しますが、特定の月、週、曜日が営業日になるような場合に使用することができます。

休日スタイルの生成

休日スタイルは、HolidayStyleオブジェクトを使って設定します。HolidayStyleオブジェクトには、次の3つのプロパティが用意されており、これらを使って、休日スタイルに含まれているすべての休日の属性を設定することができます。        

Nameプロパティには、HolidayStyleオブジェクトの内容を分かりやすく示す名称を設定します。
SubStyleプロパティは、休日の日付スタイルを設定します。日付の文字色、背景色、太字、下線を指定できます。
Holidaysプロパティは、休日そのものを保持するHolidayCollectionにアクセスするためのものです。
これらのプロパティは、次のようにしてHolidayStyleオブジェクトを生成した後に設定します。

Imports InputManCell = GrapeCity.Win.MultiRow.InputMan

' 休日スタイルを生成します。
Dim aHS As InputManCell.HolidayStyle = New InputManCell.HolidayStyle()
aHS.Name = "国民の祝日"
aHS.SubStyle = New InputManCell.SubStyle(Color.White, Color.Red, True, False)
aHS.Holidays.Add(New InputManCell.Holiday("誕生日", 10, 1))
using InputManCell = GrapeCity.Win.MultiRow.InputMan;

// 休日スタイルを生成します。
InputManCell.HolidayStyle aHS = new InputManCell.HolidayStyle();
aHS.Name = "国民の祝日";
aHS.SubStyle = new InputManCell.SubStyle(Color.White, Color.Red, true, false);
aHS.Holidays.Add(new InputManCell.Holiday("誕生日", 10, 1));
休日の追加

休日は、Holidayオブジェクトで設定します。Holidayオブジェクトは、HolidayStyleオブジェクトのHolidaysプロパティが参照するHolidayCollectionに保持されます。このHolidayオブジェクトは、次の5つの基本属性(プロパティ)を持っています。

Nameプロパティには、休日を識別するための名前を設定し、StartMonthとStartDayの2つのプロパティには休日の開始日を、また、EndMonthとEndDayの各プロパティには休日の終了日を指定します。

' 休日を追加します。
aHS.Holidays.Add(New InputManCell.Holiday("新婚旅行", 6, 28, 7, 12))
// 休日を追加します。
aHS.Holidays.Add(new InputManCell.Holiday("新婚旅行", 6, 28, 7, 12));

また、ハッピーマンデーと呼ばれる特定の月、週、曜日を指定して設定する休日は、DayOfWeekHolidayオブジェクトで設定します。このDayOfWeekHolidayオブジェクトは、次の6つの基本属性(プロパティ)を持っています。

Nameプロパティには、休日を識別するための名前を設定し、Monthには休日を設定する月、DayOfWeekInMonthには週、DayOfWeekには曜日を指定します。

' 成人の日を追加します。
aHS.Holidays.Add(New InputManCell.DayOfWeekHoliday(
                 "成人の日", GrapeCity.Win.Editors.MonthFlags.January,
                  GrapeCity.Win.Editors.DayOfWeekInMonthFlags.Second,
                  GrapeCity.Win.Editors.DayOfWeekFlags.Monday))
// 成人の日を追加します。 
aHS.Holidays.Add(new InputManCell.DayOfWeekHoliday(
    "成人の日", GrapeCity.Win.Editors.MonthFlags.January,
    GrapeCity.Win.Editors.DayOfWeekInMonthFlags.Second,
    GrapeCity.Win.Editors.DayOfWeekFlags.Monday));

休日スタイルの適用

以上のようにして作成した休日スタイルは、HolidayStyleCollectionに登録して初めて有効になります。さらに、このHolidayStyleCollectionには、複数の休日スタイルが登録されるので、どの休日スタイルをカレンダーに適用するかも指定する必要があります。

HolidayStyleCollectionへの登録は、ドロップダウンカレンダーのHolidayStylesプロパティを経由して行います。また、休日スタイルをカレンダーに適用するには、ドロップダウンカレンダーのActiveHolidayStylesプロパティを使います。

実行時に、ドロップダウンカレンダーを右クリックすると、HolidayStyleオブジェクトのNameプロパティに設定されている休日スタイル名のリストが表示されます。さらに、リストの各項目をクリックすると、それぞれの休日スタイルの有効と無効を切り替えることができます。

Imports GrapeCity.Win.MultiRow
Imports InputManCell = GrapeCity.Win.MultiRow.InputMan

Dim GcDateTimeCell1 As New InputManCell.GcDateTimeCell()
GcDateTimeCell1.Name = "GcDateTimeCell1"

' コレクションに登録します。 
GcDateTimeCell1.DropDownCalendar.HolidayStyles.Add("個人の休日", aHS)
' カレンダーに反映させます。 
GcDateTimeCell1.DropDownCalendar.ActiveHolidayStyles = New String() {"個人の休日"}

GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcDateTimeCell1})
using GrapeCity.Win.MultiRow;
using InputManCell = GrapeCity.Win.MultiRow.InputMan;

InputManCell.GcDateTimeCell gcDateTimeCell1 = new InputManCell.GcDateTimeCell();
gcDateTimeCell1.Name = "gcDateTimeCell1";

// コレクションに登録します。 
gcDateTimeCell1.DropDownCalendar.HolidayStyles.Add("個人の休日", aHS);
// カレンダーに反映させます。 
gcDateTimeCell1.DropDownCalendar.ActiveHolidayStyles = new string[] { "個人の休日" };

gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcDateTimeCell1 });

臨時の休日と営業日

上記の「休日の追加」での説明では、新婚旅行をHolidayオブジェクトに設定しましたが、これは適切ではありませんでした。通常、新婚旅行は、毎年繰り返されるものではなく、特定の年だけに行われるものです。

このように、特定の年にしか適用できないものや、年によって日付が異なるものについては、HolidayオブジェクトではなくForceHolidayオブジェクトを使用します。下のサンプルコードでは、次の祝日をForceHolidayオブジェクトを使って登録しています。
       

また、Holidayオブジェクトで設定された休日にも関わらず、その年だけは営業日になるということもあります。このような場合、ForceWorkdayオブジェクトを使うことで、Holidayオブジェクトを削除することなく、臨時に営業日に設定することが可能です。

以下は、休日スタイルの生成で設定した誕生日(10月1日)を2015年に限って臨時営業日(仕事)にし、翌日を臨時休日(代休)に設定する例です。

Imports InputManCell = GrapeCity.Win.MultiRow.InputMan

' 2015年10月1日を臨時営業日(仕事)に設定します。 
Dim aDateA As DateTime = DateTime.Parse("2015/10/1")
GcDateTimeCell1.DropDownCalendar.HolidayStyles("個人の休日").Holidays.Add(New InputManCell.ForceWorkday("仕事", aDateA))

' 2015年10月2日を臨時休日(代休)に設定します。 
Dim aDateB As DateTime = DateTime.Parse("2015/10/2")
GcDateTimeCell1.DropDownCalendar.HolidayStyles("個人の休日").Holidays.Add(New InputManCell.ForceHoliday("代休", aDateB))
using InputManCell = GrapeCity.Win.MultiRow.InputMan;

// 2015年10月1日を臨時営業日(仕事)に設定します。 
DateTime aDateA = DateTime.Parse("2015/10/1");
gcDateTimeCell1.DropDownCalendar.HolidayStyles["個人の休日"].Holidays.Add(new InputManCell.ForceWorkday("仕事", aDateA));

// 2015年10月2日を臨時休日(代休)に設定します。 
DateTime aDateB = DateTime.Parse("2015/10/2");
gcDateTimeCell1.DropDownCalendar.HolidayStyles["個人の休日"].Holidays.Add(new InputManCell.ForceHoliday("代休", aDateB));
振替休日

国民の祝日が日曜日に重なったとき、翌日を休日にするというシステムに対応して、ドロップダウンカレンダーには、この振替休日を自動的に設定する機能があります。

振替休日は、HolidayCollectionのWeekdaysプロパティを経由してDayOfWeekdayPolicy構造体にアクセスすることで、設定できます。以下にその例を示します。

aHS.Holidays.Weekdays.Sunday = New GrapeCity.Win.Editors.DayOfWeekHolidayPolicy(
    GrapeCity.Win.Editors.WeekFlags.All,
    GrapeCity.Win.Editors.HolidayOverride.NextWorkDay)
aHS.Holidays.Weekdays.Sunday = new GrapeCity.Win.Editors.DayOfWeekHolidayPolicy(
    GrapeCity.Win.Editors.WeekFlags.All,
    GrapeCity.Win.Editors.HolidayOverride.NextWorkDay);

ドロップダウンカレンダーでは、カレンダー上に表示された休日が、休日そのものか振替休日かを示すためにツールチップ機能が用意されています。

カレンダー上の振替休日にマウスカーソルが位置したときに表示するツールチップをOverrideTipTextプロパティで設定できます。また、ツールチップを表示するタイミングは、TipIntervalプロパティで指定します。

参照

 

 


© 2008-2015 GrapeCity inc. All rights reserved.