using System;
using System.Drawing;
using GrapeCity.Web.Input.IMCalendar;
public partial class Calendar_Holiday : System.Web.UI.Page
{
protected HolidayStyle nationalHoliday = new HolidayStyle();
protected HolidayStyle normalday = new HolidayStyle();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 初期値を設定します。
GcCalendar1.SelectedDate = GrapeCity.Web.Input.Core.DateTimeEx.Now;
// 2019年4月現在の国民の祝日を設定します。
// 固定の祝日を設定します。
nationalHoliday.Name = "国民の祝日";
nationalHoliday.SubStyle = new SubStyle(Color.WhiteSmoke, Color.Red);
nationalHoliday.Holidays.Add(new Holiday("元旦", 1, 1));
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 Holiday("文化の日", 11, 3));
nationalHoliday.Holidays.Add(new Holiday("勤労感謝の日", 11, 23));
// ハッピーマンデーを設定します。
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("成人の日", MonthFlags.January, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
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 ForceHoliday("休日", DateTime.Parse("2019/4/30")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/5/1")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/5/2")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/10/22")));
// 2020年の東京オリンピック・東京パラリンピックにともなう休日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("海の日", DateTime.Parse("2020/7/23")));
nationalHoliday.Holidays.Add(new ForceHoliday("スポーツの日", DateTime.Parse("2020/7/24")));
nationalHoliday.Holidays.Add(new ForceHoliday("山の日", DateTime.Parse("2020/8/10")));
// 2020年の「7月20日」「10月12日」を通常日に設定します。
normalday.Name = "通常日";
normalday.SubStyle = new SubStyle(Color.White, Color.Firebrick);
normalday.Holidays.Add(new ForceWorkday("", DateTime.Parse("2020/7/20")));
normalday.Holidays.Add(new ForceWorkday("", DateTime.Parse("2020/10/12")));
//normalday.Holidays.Add(new ForceDayOfWeekWorkday(2020 , MonthFlags.July, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
//normalday.Holidays.Add(new ForceDayOfWeekWorkday(2020, MonthFlags.October, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
// 年によって変化する祝日を2000年~2050年の分を設定します。
for (int i = 2000; i <= 2050; i++)
{
SetYearHoliday(i);
}
// 振替休日の扱いを設定します。
nationalHoliday.Holidays.Weekdays.Sunday = new DayOfWeekHolidayPolicy(WeekFlags.All, HolidayOverride.NextWorkday);
GcCalendar1.OverrideTipText = "振替休日";
GcDate1.DropDownCalendar.OverrideTipText = "振替休日";
// 休日スタイルをコレクションに追加してカレンダーに反映させます。
GcCalendar1.HolidayStyles.Add("国民の祝日", nationalHoliday);
GcCalendar1.HolidayStyles.Add("通常日", normalday);
GcCalendar1.ActiveHolidayStyles = new string[] { "国民の祝日", "通常日" };
GcDate1.DropDownCalendar.HolidayStyles.Add("国民の祝日", nationalHoliday);
GcDate1.DropDownCalendar.HolidayStyles.Add("通常日", normalday);
GcDate1.DropDownCalendar.ActiveHolidayStyles = new string[] { "国民の祝日", "通常日" };
}
}
private void SetYearHoliday(int Year)
{
// 年によって変化する国民の祝日を設定します。
int currentYear = Year;
// 春分の日と秋分の日の初期値として2019年の祝日を設定します。
DateTime syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
DateTime syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
switch (currentYear % 4)
{
case 0:
// 春分の日を設定します。
if (currentYear < 1960)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else if (currentYear >= 1960 && currentYear < 2092)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/19");
}
// 秋分の日を設定します。
if (currentYear < 2012)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 1:
// 春分の日を設定します。
if (currentYear < 1993)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1921)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else if (currentYear >= 1921 && currentYear < 2045)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 2:
// 春分の日を設定します。
if (currentYear < 2026)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1950)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else if (currentYear >= 1950 && currentYear < 2078)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 3:
// 春分の日を設定します。
if (currentYear < 1927)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/22");
}
else if (currentYear >= 1927 && currentYear < 2059)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1983)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
break;
}
// 春分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", syunbun));
// 秋分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", syubun));
// 2つの祝日に挟まれた営業日を休日に設定します。
if (currentYear > 2003)
{
if (syubun.DayOfWeek == System.DayOfWeek.Wednesday)
{
nationalHoliday.Holidays.Add(new ForceHoliday("休日", syubun.AddDays(-1)));
}
}
// 2016年以降「山の日」を追加します。
if (currentYear > 2015 && currentYear != 2020)
{
nationalHoliday.Holidays.Add(new ForceHoliday("山の日", DateTime.Parse(currentYear.ToString() + "/8/11")));
}
// 天皇誕生日を追加します。
if (currentYear < 2019)
{
nationalHoliday.Holidays.Add(new ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/12/23")));
}
else if (currentYear > 2019)
{
nationalHoliday.Holidays.Add(new ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/2/23")));
}
}
protected void Button1_Click(object sender, EventArgs e)
{
HolidayStyle myHoliday = new HolidayStyle();
// コンテキストメニューの表示、非表示を設定します。
GcCalendar1.ShowContextMenu = CheckBox3.Checked;
GcDate1.DropDownCalendar.ShowContextMenu = CheckBox3.Checked;
// DayOfWeekFlags用の定数を作成します。
int dayOfWeek = 0;
int flagCount = 1;
for (int i = 0; i < ListBox1.Items.Count; i++)
{
if (ListBox1.Items[i].Selected)
{
dayOfWeek += flagCount;
}
flagCount = flagCount * 2;
}
// Weekflags用の定数を作成します。
int weekSetting = 0;
flagCount = 1;
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
if (CheckBoxList1.Items[i].Selected)
{
weekSetting += flagCount;
}
flagCount = flagCount * 2;
}
Color forecolor = GcColorPicker1.SelectedIndex < 0 ? SystemColors.WindowText : GcColorPicker1.SelectedColor;
Color backcolor = GcColorPicker2.SelectedIndex < 0 ? Color.White : GcColorPicker2.SelectedColor;
string imageURL = GcComboBox1.SelectedIndex < 0 ? "" : GcComboBox1.ImageList[GcComboBox1.SelectedIndex].URL;
// 休業日と休業日のスタイルを各コントロールに設定します。
myHoliday.Holidays.Add(new DayOfWeekHoliday(MonthFlags.All, (DayOfWeekInMonthFlags)weekSetting, (DayOfWeekFlags)dayOfWeek));
myHoliday.SubStyle = new SubStyle(backcolor, forecolor, CheckBox1.Checked, CheckBox2.Checked, true, imageURL);
// 休業日をカレンダーに追加します。
string holidayName = "休業日" + GcCalendar1.HolidayStyles.Count.ToString();
GcCalendar1.HolidayStyles.Add(holidayName, myHoliday);
GcDate1.DropDownCalendar.HolidayStyles.Add(holidayName, myHoliday);
// 追加した休業日をアクティブにします。
System.Collections.ArrayList styles = new System.Collections.ArrayList();
for (int i = 0; i < GcCalendar1.HolidayStyles.Count; i++)
{
styles.Add(GcCalendar1.HolidayStyles.GetKey(i));
}
GcCalendar1.ActiveHolidayStyles = (string[])styles.ToArray(typeof(string));
GcDate1.DropDownCalendar.ActiveHolidayStyles = (string[])styles.ToArray(typeof(string));
}
}
|