以编程方式将颜色设置为Windows应用程序的日历中的特定日期

时间:2015-01-30 20:41:43

标签: c# winforms

我正在创建一个Windows应用程序,我在其中使用默认日历来预约。我想检查日历的每一天,并为其中一些设置背景颜色,以区别于其他日期,例如可用,预约关闭,假期等。

我搜索过并发现使用OnDayRender事件更改某些天的BackColor是可能的。但我所理解的是它仅适用于不适用于窗体的网页表单。是否有相同或任何替代方法在winforms中实现相同的解决方案? (例如使用嵌入式WPF控件等。)

2 个答案:

答案 0 :(得分:3)

也许你可以这样做:

DateTime someDate = new DateTime(); //or an array of dates, then run a loop

private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
    if (monthCalendar1.SelectionStart == someDate)
    {
        monthCalendar1.BackColor = SystemColors.someColor;
    }
    else
    {
        monthCalendar1.BackColor = SystemColors.Control;
    }
}

答案 1 :(得分:1)

在WinForms中没有简单的方法。

一种选择是创建自己的日历,该日历继承自MonthCalendar控件。您必须覆盖OnPaint方法。在该方法中,您必须为要更改背景的每个日期本地化Rectangle,然后更改它(背景)。可以找到OnPaintWndProc覆盖创建自己的日历控件的示例here。这个例子不是你想要的,但是一个好的开始。

然而,还有另一种选择。您不是第一个在日历控件中搜索此功能的人。所以有人已经创建了一个高度可定制的WinForms日历。它做你想要的,甚至更多。它被称为Another Month Calendar