Imports GrapeCity.Win.Editors
Dim nationalHoliday As HolidayStyle = New HolidayStyle()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetNationalHoliday()
End Sub
Private Sub SetNationalHoliday()
' 2015年5月現在の国民の祝日を設定します。
' 固定の祝日を設定します。
nationalHoliday.Name = "国民の祝日"
nationalHoliday.SubStyle = New SubStyle(Color.Pink, Color.White)
nationalHoliday.Holidays.Add(New Holiday("元日", 1, 1))
nationalHoliday.Holidays.Add(New DayOfWeekHoliday("成人の日", MonthFlags.January, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday))
nationalHoliday.Holidays.Add(New Holiday("建国記念の日", 2, 11))
nationalHoliday.Holidays.Add(New Holiday("昭和の日", 4, 29))
nationalHoliday.Holidays.Add(New Holiday("憲法記念日", 5, 3))
nationalHoliday.Holidays.Add(New Holiday("みどりの日", 5, 4))
nationalHoliday.Holidays.Add(New Holiday("こどもの日", 5, 5))
nationalHoliday.Holidays.Add(New DayOfWeekHoliday("海の日", MonthFlags.July, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday))
nationalHoliday.Holidays.Add(New DayOfWeekHoliday("敬老の日", MonthFlags.September, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday))
nationalHoliday.Holidays.Add(New DayOfWeekHoliday("体育の日", MonthFlags.October, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday))
nationalHoliday.Holidays.Add(New Holiday("文化の日", 11, 3))
nationalHoliday.Holidays.Add(New Holiday("勤労感謝の日", 11, 23))
nationalHoliday.Holidays.Add(New Holiday("天皇誕生日", 12, 23))
' 年によって変化する祝日の初期値(2015年)を設定します。
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse("2015/3/21")))
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse("2015/9/23")))
' 振替休日の扱いを設定します。
nationalHoliday.Holidays.Weekdays.Sunday = New DayOfWeekHolidayPolicy(WeekFlags.All, HolidayOverride.NextWorkDay)
GcDateTime1.DropDownCalendar.OverrideTipText = "振替休日"
' 休日スタイルをコレクションに追加してカレンダーに反映させます。
GcDateTime1.DropDownCalendar.HolidayStyles.Add("国民の祝日", nationalHoliday)
GcDateTime1.DropDownCalendar.ActiveHolidayStyles = New String() {"国民の祝日"}
End Sub
Private Sub GcDateTime1.DropDownCalendar_Scrolled(ByVal sender As Object, ByVal e As GrapeCity.Win.Editors.ScrolledEventArgs) Handles GcDateTime1.DropDownCalendar.Scrolled
' 年によって変化する国民の祝日(春分の日、秋分の日)を設定します。
Dim currentYear As Integer = e.StartDate.Year
' 前回の祝日を破棄します。
nationalHoliday.Holidays.RemoveAt(13)
nationalHoliday.Holidays.RemoveAt(13)
' 1900年から2099年までを対象にしています。
' この範囲を超えた年については、便宜的に
' 2015年の設定をそのまま使用します。
If currentYear > 1899 AndAlso currentYear < 2100 Then
Select Case currentYear Mod 4
Case 0
' 春分の日を設定します。
If currentYear < 1960 Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")))
ElseIf currentYear >= 1960 AndAlso currentYear < 2092 Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/19")))
End If
' 秋分の日を設定します。
If currentYear < 2012 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")))
End If
Case 1
' 春分の日を設定します。
If currentYear < 1993 Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")))
End If
' 秋分の日を設定します。
If currentYear < 1921 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")))
ElseIf currentYear >= 1921 AndAlso currentYear < 2045 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")))
End If
Case 2
' 春分の日を設定します。
If currentYear < 2026 Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")))
End If
' 秋分の日を設定します。
If currentYear < 1950 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")))
ElseIf currentYear >= 1950 AndAlso currentYear < 2078 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")))
End If
Case 3
' 春分の日を設定します。
If (currentYear < 1927) Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/22")))
ElseIf currentYear >= 1927 AndAlso currentYear < 2059 Then
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")))
End If
' 秋分の日を設定します。
If currentYear < 1983 Then
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")))
Else
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")))
End If
End Select
' 2つの祝日に挟まれた営業日を休日に設定します。
If currentYear > 2003 Then
Dim Syubun As DateTime = CType(nationalHoliday.Holidays(nationalHoliday.Holidays.Count - 1), ForceHoliday).Start
If Syubun.DayOfWeek = System.DayOfWeek.Wednesday Then
nationalHoliday.Holidays.Add(New ForceHoliday("休日", Syubun.AddDays(-1)))
End If
End If
' 2016年以降、山の日を設定します。
If currentYear > 2015 Then
nationalHoliday.Holidays.Add(New ForceHoliday("山の日", DateTime.Parse(currentYear.ToString() + "/8/11")))
End If
Else
' 2015年の春分の日を設定します。
nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")))
' 2015年の秋分の日を設定します。
nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")))
End If
End Sub
using GrapeCity.Win.Editors;
HolidayStyle nationalHoliday = new HolidayStyle();
private void Form1_Load(object sender, EventArgs e)
{
SetNationalHoliday();
gcDateTime1.DropDownCalendar.Scrolled += DropDownCalendar_Scrolled;
}
private void SetNationalHoliday()
{
// 2015年5月現在の国民の祝日を設定します。
// 固定の祝日を設定します。
nationalHoliday.Name = "国民の祝日";
nationalHoliday.SubStyle = new SubStyle(Color.WhiteSmoke, Color.Red);
nationalHoliday.Holidays.Add(new Holiday("元旦", 1, 1));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("成人の日", MonthFlags.January, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new Holiday("建国記念の日", 2, 11));
nationalHoliday.Holidays.Add(new Holiday("昭和の日", 4, 29));
nationalHoliday.Holidays.Add(new Holiday("憲法記念日", 5, 3));
nationalHoliday.Holidays.Add(new Holiday("みどりの日", 5, 4));
nationalHoliday.Holidays.Add(new Holiday("こどもの日", 5, 5));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("海の日", MonthFlags.July, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("敬老の日", MonthFlags.September, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("体育の日", MonthFlags.October, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new Holiday("文化の日", 11, 3));
nationalHoliday.Holidays.Add(new Holiday("勤労感謝の日", 11, 23));
nationalHoliday.Holidays.Add(new Holiday("天皇誕生日", 12, 23));
// 年によって変化する祝日の初期値(2015年)を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse("2015/3/21")));
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse("2015/9/23")));
// 振替休日の扱いを設定します。
nationalHoliday.Holidays.Weekdays.Sunday = new DayOfWeekHolidayPolicy(WeekFlags.All, HolidayOverride.NextWorkDay);
gcDateTime1.DropDownCalendar.OverrideTipText = "振替休日";
// 休日スタイルをコレクションに追加してカレンダーに反映させます。
gcDateTime1.DropDownCalendar.HolidayStyles.Add("国民の祝日", nationalHoliday);
gcDateTime1.DropDownCalendar.ActiveHolidayStyles = new string[] {"国民の祝日"};
}
private void gcDateTime1.DropDownCalendar_Scrolled(object sender, GrapeCity.Win.Editors.ScrolledEventArgs e)
{
// 年によって変化する国民の祝日(春分の日、秋分の日)を設定します。
int currentYear = e.StartDate.Year;
// 前回の祝日を破棄します。
nationalHoliday.Holidays.RemoveAt(13);
nationalHoliday.Holidays.RemoveAt(13);
// 1900年から2099年までを対象にしています。
// この範囲を超えた年については、便宜的に
// 2015年の設定をそのまま使用します。
if (currentYear > 1899 && currentYear < 2100)
{
switch (currentYear % 4)
{
case 0:
// 春分の日を設定します。
if (currentYear < 1960)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")));
}
else if (currentYear >= 1960 && currentYear < 2092)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/19")));
}
// 秋分の日を設定します。
if (currentYear < 2012)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")));
}
break;
case 1:
// 春分の日を設定します。
if (currentYear < 1993)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")));
}
// 秋分の日を設定します。
if (currentYear < 1921)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")));
}
else if (currentYear >= 1921 && currentYear < 2045)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")));
}
break;
case 2:
// 春分の日を設定します。
if (currentYear < 2026)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")));
}
// 秋分の日を設定します。
if (currentYear < 1950)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")));
}
else if (currentYear >= 1950 && currentYear < 2078)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/22")));
}
break;
case 3:
// 春分の日を設定します。
if (currentYear < 1927)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/22")));
}
else if (currentYear >= 1927 && currentYear < 2059)
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/20")));
}
// 秋分の日を設定します。
if (currentYear < 1983)
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/24")));
}
else
{
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")));
}
break;
}
// 2つの祝日に挟まれた営業日を休日に設定します。
if (currentYear > 2003)
{
DateTime Syubun = ((ForceHoliday)nationalHoliday.Holidays[nationalHoliday.Holidays.Count - 1]).Start;
if (Syubun.DayOfWeek == System.DayOfWeek.Wednesday)
{
nationalHoliday.Holidays.Add(new ForceHoliday("休日", Syubun.AddDays(-1)));
}
}
// 2016年以降、山の日を設定します。
if(currentYear > 2015)
{
nationalHoliday.Holidays.Add(new ForceHoliday("山の日", DateTime.Parse(currentYear.ToString() + "/8/11")));
}
}
else
{
// 2015年の春分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", DateTime.Parse(currentYear.ToString() + "/3/21")));
// 2015年の秋分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", DateTime.Parse(currentYear.ToString() + "/9/23")));
}
}