多機能カレンダー - 休日と休業日 -

カレンダーおよび日付コントロールのドロップダウンカレンダーでは、祝日を設定できるほか、休業日(毎週の定期的な休み)も設定できます。 休業日に設定する曜日と週を選択し、指定した休業日の文字や背景のスタイルを設定します。ここでは、カレンダーにはあらかじめ国民の祝日が設定されています。

カレンダー:
日付:
休業日の設定 スタイル
文字色  
背景色  
背景画像 


ソースコード

別ウィンドウで表示
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));
    }
}
Imports GrapeCity.Web.Input.IMCalendar
Imports System.Drawing

Partial Class Calendar_Holiday
    Inherits System.Web.UI.Page

    Protected nationalHoliday As HolidayStyle = New HolidayStyle()
    Protected normalday As HolidayStyle = New HolidayStyle()

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            ' 初期値を設定します。
            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))

            ' 年によって変化する祝日を2005年~2030年の分を設定します。 
            For i As Integer = 2005 To 2030
                ' 春分の日、秋分の日を設定します。 
                SetYearHoliday(i)
            Next 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() {"国民の祝日", "通常日"}
        End If
    End Sub

    Private Sub SetYearHoliday(ByVal Year As Integer)
        ' 年によって変化する国民の祝日を設定します。 
        Dim currentYear As Integer = Year

        ' 春分の日と秋分の日の初期値として2019年の祝日を設定します。
        Dim syunbun As DateTime = DateTime.Parse(DateTime.Parse(currentYear.ToString() + "/3/21"))
        Dim syubun As DateTime = DateTime.Parse(DateTime.Parse(currentYear.ToString() + "/9/23"))

        Select Case currentYear Mod 4
            Case 0
                ' 春分の日を設定します。
                If currentYear < 1960 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/21")
                ElseIf currentYear >= 1960 AndAlso currentYear < 2092 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/20")
                Else
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/19")
                End If
                ' 秋分の日を設定します。
                If currentYear < 2012 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/23")
                Else
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/22")
                End If
            Case 1
                ' 春分の日を設定します。
                If currentYear < 1993 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/21")
                Else
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/20")
                End If
                ' 秋分の日を設定します。
                If currentYear < 1921 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/24")
                ElseIf currentYear >= 1921 AndAlso currentYear < 2045 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/23")
                Else
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/22")
                End If
            Case 2
                ' 春分の日を設定します。
                If currentYear < 2026 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/21")
                Else
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/20")
                End If
                ' 秋分の日を設定します。
                If currentYear < 1950 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/24")
                ElseIf currentYear >= 1950 AndAlso currentYear < 2078 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/23")
                Else
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/22")
                End If
            Case 3
                ' 春分の日を設定します。
                If currentYear < 1927 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/22")
                ElseIf currentYear >= 1927 AndAlso currentYear < 2059 Then
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/21")
                Else
                    syunbun = DateTime.Parse(currentYear.ToString() + "/3/20")
                End If
                ' 秋分の日を設定します。
                If currentYear < 1983 Then
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/24")
                Else
                    syubun = DateTime.Parse(currentYear.ToString() + "/9/23")
                End If
        End Select

        ' 春分の日を設定します。
        nationalHoliday.Holidays.Add(New ForceHoliday("春分の日", syunbun))
        ' 秋分の日を設定します。
        nationalHoliday.Holidays.Add(New ForceHoliday("秋分の日", syubun))

        ' 2つの祝日に挟まれた営業日を休日に設定します。
        If currentYear > 2003 Then
            If syubun.DayOfWeek = System.DayOfWeek.Wednesday Then
                nationalHoliday.Holidays.Add(New ForceHoliday("休日", syubun.AddDays(-1)))
            End If
        End If

        ' 2016年以降「山の日」を追加します。
        If (currentYear > 2015 AndAlso currentYear <> 2020) Then
            nationalHoliday.Holidays.Add(New ForceHoliday("山の日", DateTime.Parse(currentYear.ToString() + "/8/11")))
        End If

        ' 天皇誕生日を追加します。
        If (currentYear < 2019) Then
            nationalHoliday.Holidays.Add(New ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/12/23")))

        ElseIf (currentYear > 2019) Then
            nationalHoliday.Holidays.Add(New ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/2/23")))
        End If
    End Sub

    ' 休業日を追加します。
    Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
        Dim myHoliday As New HolidayStyle()

        ' コンテキストメニューの表示、非表示を設定します。
        GcCalendar1.ShowContextMenu = CheckBox3.Checked
        GcDate1.DropDownCalendar.ShowContextMenu = CheckBox3.Checked

        ' DayOfWeekFlags用の定数を作成します。
        Dim dayOfWeek As Integer = 0
        Dim flagCount As Integer = 1
        For i As Integer = 0 To ListBox1.Items.Count - 1
            If ListBox1.Items(i).Selected Then
                dayOfWeek += flagCount
            End If
            flagCount = flagCount * 2
        Next

        ' Weekflags用の定数を作成します。
        Dim weekSetting As Integer = 0
        flagCount = 1
        For i As Integer = 0 To CheckBoxList1.Items.Count - 1
            If CheckBoxList1.Items(i).Selected Then
                weekSetting += flagCount
            End If

            flagCount = flagCount * 2
        Next

        ' 背景色、文字色、背景画像を取得します。 
        Dim forecolor As Color = SystemColors.WindowText
        Dim backcolor As Color = Color.Empty
        Dim imageURL As String = ""

        If GcColorPicker1.SelectedIndex > -1 Then
            forecolor = GcColorPicker1.SelectedColor
        End If

        If GcColorPicker2.SelectedIndex > -1 Then
            backcolor = GcColorPicker2.SelectedColor
        End If

        If GcComboBox1.SelectedIndex > -1 Then
            imageURL = GcComboBox1.ImageList(GcComboBox1.SelectedIndex).URL

        End If

        ' 休業日と休業日のスタイルを各コントロールに設定します。
        myHoliday.Holidays.Add(New DayOfWeekHoliday(MonthFlags.All, weekSetting, dayOfWeek))
        myHoliday.SubStyle = New SubStyle(backcolor, forecolor, CheckBox1.Checked, CheckBox2.Checked, True, imageURL)

        ' 休業日をカレンダーに追加します。
        Dim holidayName As String = "休業日" + GcCalendar1.HolidayStyles.Count.ToString()
        GcCalendar1.HolidayStyles.Add(holidayName, myHoliday)
        GcDate1.DropDownCalendar.HolidayStyles.Add(holidayName, myHoliday)

        ' 追加した休業日をアクティブにします。
        Dim styles As New System.Collections.ArrayList

        For i As Integer = 0 To GcCalendar1.HolidayStyles.Count - 1
            styles.Add(GcCalendar1.HolidayStyles.GetKey(i))
        Next

        GcCalendar1.ActiveHolidayStyles = styles.ToArray(GetType(String))
        GcDate1.DropDownCalendar.ActiveHolidayStyles = styles.ToArray(GetType(String))

    End Sub
End Class

<%@ page title="" language="C#" masterpagefile="~/MasterPage.master" autoeventwireup="true" inherits="Calendar_Holiday, App_Web_xgcowugm" stylesheettheme="SkinFile" %>

<%@ Register assembly="GrapeCity.Web.Input.v100, Version=10.0.4006.2012, Culture=neutral, PublicKeyToken=c3bd7c1dccef5128" namespace="GrapeCity.Web.Input.IMCalendar" tagprefix="im_calendar" %>
<%@ Register assembly="GrapeCity.Web.Input.v100, Version=10.0.4006.2012, Culture=neutral, PublicKeyToken=c3bd7c1dccef5128" namespace="GrapeCity.Web.Input.IMDate" tagprefix="im_date" %>
<%@ Register assembly="GrapeCity.Web.Input.v100, Version=10.0.4006.2012, Culture=neutral, PublicKeyToken=c3bd7c1dccef5128" namespace="GrapeCity.Web.Input.IMCombo" tagprefix="im_combo" %>
<%@ Register assembly="GrapeCity.Web.Input.ColorPicker.v100" namespace="GrapeCity.Web.Input.IMColorPicker" tagprefix="im_ColorPicker" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <script type="text/javascript">
        function AddHoliday() {
            var calendar = FindIMControl("<%= GcCalendar1.ClientID %>");
            var dropdownCalendar = FindIMControl("<%= GcDate1.ClientID %>").GetDropDownCalendar();

            // コンテキストメニューの表示、非表示を設定します。
            calendar.SetShowContextMenu(document.getElementById("<%= CheckBox3.ClientID %>").checked);
            dropdownCalendar.SetShowContextMenu(document.getElementById("<%= CheckBox3.ClientID %>").checked);

            // 休業日を設定します。
            var holiday = new GCIM.DayOfWeekHoliday();

            // 曜日を設定します。
            var sel = document.getElementById('<%= ListBox1.ClientID%>');
            if (sel.options.length < 1) return;
            var dayofWeek = "";
            for (var i = 0; i < sel.options.length; i++) {
                if (sel.options[i].selected) {
                    if (dayofWeek != "") dayofWeek += ",";
                    dayofWeek += sel.options[i].value;
                }
            }
            holiday.SetDayOfWeek(dayofWeek);

            // 週を設定します。
            var options = document.getElementById('<%= CheckBoxList1.ClientID%>').getElementsByTagName('input');
            if (options.length < 1) return;
            var weekInMonth = "";
            for (var i = 0; i < options.length; i++) {
                if (options[i].checked) {
                    if (weekInMonth != "") weekInMonth += ",";
                    weekInMonth += options[i].value;
                }
            }
            holiday.SetDayOfWeekInMonth(weekInMonth);
            holiday.SetMonth("all");

            // スタイルを設定します。
            var holidayStyle = new GCIM.HolidayStyle('休業日' + calendar.GetHolidayStylesCount());

            // 文字装飾を設定します。
            holidayStyle.SetBold(document.getElementById("<%= CheckBox1.ClientID %>").checked);
            holidayStyle.SetUnderLine(document.getElementById("<%= CheckBox2.ClientID %>").checked);

            // 文字色を設定します。
            if (FindIMControl("<%= GcColorPicker1.ClientID %>").GetSelectedIndex() > -1) {
                holidayStyle.SetForeColor(FindIMControl("<%= GcColorPicker1.ClientID %>").GetText());
            }
            else {
                holidayStyle.SetForeColor("black");
            }
            // 背景色を設定します。
            if (FindIMControl("<%= GcColorPicker2.ClientID %>").GetSelectedIndex() > -1) {
                holidayStyle.SetBackColor(FindIMControl("<%= GcColorPicker2.ClientID %>").GetText());
            }
            else {
                holidayStyle.SetBackColor("white");
            }
            // 背景画像を設定します。
            if (FindIMControl("<%= GcComboBox1.ClientID %>").GetSelectedIndex() > -1) {
                var imageUrl = FindIMControl("<%= GcComboBox1.ClientID %>").GetSelectedItem().GetImageUrl();
                holidayStyle.SetImageUrl(imageUrl);

            }

            holidayStyle.SetIsActive(true);
            holidayStyle.AddHoliday(holiday);
            calendar.AddHolidayStyle(holidayStyle);
            dropdownCalendar.AddHolidayStyle(holidayStyle);
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <div class="sample">
        <table>
            <tr>
                <td class="controlsTd" valign="top">カレンダー:</td>
                <td class="controlsTd">
                    <im_calendar:GcCalendar ID="GcCalendar1" runat="server" BackColor="#FDE4D0" 
                        BorderColor="#F06454" BorderStyle="Solid" BorderWidth="1px" 
                        HasLoadFromXml="True" HCellSpacing="1" VCellSpacing="1" HeaderFormat="ggg e年 M月" 
                        Height="210px" Width="210px">
                        <ItemStyle BorderColor="#F06454" BorderStyle="Solid" BorderWidth="1px" ForeColor="#B22222" BackColor="White" />
                        <HeaderStyle BackColor="#FDE4D0" BorderColor="#A0A0A0" ForeColor="#8B0000" />
                        <TitleStyle BackColor="#FDE4D0" ForeColor="#F06454" />
                        <weekflags index="0" value="All"></weekflags>
                        <weekflags index="6" value="All"></weekflags>
                        <helpvalues selecteddate = "2013/01/21 00:00:00" culturename = 'ja-JP' 
                            height="210px" width="210px" ></helpvalues>
                    </im_calendar:GcCalendar>
                </td>
                <td class="controlsTd" valign="top">日付:</td>
                <td class="controlsTd" valign="top">
                    <im_date:GcDate ID="GcDate1" runat="server" HasLoadFromXml="True">
                        <dropdowncalendar autosize="False" backcolor="#F0FFF0" hcellspacing="2" 
                            headerformat="ggg e年 M月" height="210px" vcellspacing="2" width="210px">
                            <ItemStyle BorderColor="#32CD32" BorderStyle="Solid" BorderWidth="1px" />
                            <HeaderStyle BackColor="#F0FFF0" BorderColor="#646464" ForeColor="#556B2F" />
                            <TitleStyle BackColor="#F0FFF0" ForeColor="#556B2F" />
                        </dropdowncalendar>
                        <weekflags index="0" value="All"></weekflags>
                        <weekflags index="6" value="All"></weekflags>
                    </im_date:GcDate>
                </td>
            </tr>
        </table>
    </div>
    <table class="inputTable">
        <tr>
            <th class="inputTh">休業日の設定</th>
            <th class="inputTh">スタイル</th>
        </tr>
        <tr>
            <td class="inputTd" rowspan="4">
            <table>
                <tr>
                    <td>
                    <asp:ListBox ID="ListBox1" runat="server" Font-Names="メイリオ" Height="150px" Width="75px" SelectionMode="Multiple">
                        <asp:ListItem Value="sunday">日曜日</asp:ListItem>
                        <asp:ListItem Value="monday">月曜日</asp:ListItem>
                        <asp:ListItem Value="tuesday">火曜日</asp:ListItem>
                        <asp:ListItem Value="wednesday">水曜日</asp:ListItem>
                        <asp:ListItem Value="thursday">木曜日</asp:ListItem>
                        <asp:ListItem Value="friday">金曜日</asp:ListItem>
                        <asp:ListItem Value="saturday">土曜日</asp:ListItem>
                    </asp:ListBox>
                    </td>
                    <td>
                    <asp:CheckBoxList ID="CheckBoxList1" runat="server" style="margin-left:10px; font-size:120%;">
                        <asp:ListItem Value="first">最初の週</asp:ListItem>
                        <asp:ListItem Value="second">第2週</asp:ListItem>
                        <asp:ListItem Value="third">第3週</asp:ListItem>
                        <asp:ListItem Value="fourth">第4週</asp:ListItem>
                        <asp:ListItem Value="fifth">第5週</asp:ListItem>
                    </asp:CheckBoxList>
                    </td>
                </tr>
            </table>
            </td>
            <td class="inputTd">
                <asp:CheckBox ID="CheckBox1" runat="server" Text="太字" />
                <asp:CheckBox ID="CheckBox2" runat="server" Text="下線" />
            </td>
        </tr>
        <tr>
            <td class="inputTd">文字色 &nbsp;
                <im_ColorPicker:GcColorPicker ID="GcColorPicker1" runat="server"></im_ColorPicker:GcColorPicker>
            </td>
        </tr>
        <tr>
            <td class="inputTd">背景色 &nbsp;
                <im_ColorPicker:GcColorPicker ID="GcColorPicker2" runat="server"></im_ColorPicker:GcColorPicker>
            </td>
        </tr>
        <tr>
            <td class="inputTd">背景画像&nbsp;
                <im_combo:GcComboBox ID="GcComboBox1" runat="server" HasLoadFromXml="True" 
                    Width="50" Height="25px" ImageWidth="24" TextBoxStyle="ImageOnly">
                    <ListBox ItemHeight="25" ShowItemImage="True" />
                    <imageitem height="23" name="holiday1" url="~/images/imImages/holiday1.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday2" url="~/images/imImages/holiday2.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday3" url="~/images/imImages/holiday3.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday4" url="~/images/imImages/holiday4.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday5" url="~/images/imImages/holiday5.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday6" url="~/images/imImages/holiday6.png" width="24"></imageitem>
                    <imageitem height="23" name="holiday7" url="~/images/imImages/holiday7.png" width="24"></imageitem>
                    <listcolumn autowidth="False" datadisplaytype="Text" header-text="Column0" width="46"></listcolumn>
                    <comboitem image="0"></comboitem>
                    <comboitem image="1"></comboitem>
                    <comboitem image="2"></comboitem>
                    <comboitem image="3"></comboitem>
                    <comboitem image="4"></comboitem>
                    <comboitem image="5"></comboitem>
                    <comboitem image="6"></comboitem>
                    <helpvalue ></helpvalue>
                </im_combo:GcComboBox>
            </td>
        </tr>
        <tr>
            <td colspan="2" class="inputTd">
                <asp:CheckBox ID="CheckBox3" runat="server" Text="コンテキストメニューに休日コレクションを表示する" Checked="True" />
            </td>
        </tr>
    </table>
    <center>
        <input id="Button2" type="button" value="休業日の追加(クライアント側)" onclick="AddHoliday()" class="button_nowidth"/><br />
        <asp:Button ID="Button1" runat="server" CssClass="button_nowidth" Text="休業日の追加(サーバー側)" 
            onclick="Button1_Click" />
    </center>
</asp:Content>


このページの先頭へ戻る