我正在创建一个Windows应用程序,我在其中使用默认日历来预约。我想检查日历的每一天,并为其中一些设置背景颜色,以区别于其他日期,例如可用,预约关闭,假期等。
我搜索过并发现使用OnDayRender
事件更改某些天的BackColor
是可能的。但我所理解的是它仅适用于不适用于窗体的网页表单。是否有相同或任何替代方法在winforms中实现相同的解决方案? (例如使用嵌入式WPF控件等。)
答案 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
,然后更改它(背景)。可以找到OnPaint
和WndProc
覆盖创建自己的日历控件的示例here。这个例子不是你想要的,但是一个好的开始。
然而,还有另一种选择。您不是第一个在日历控件中搜索此功能的人。所以有人已经创建了一个高度可定制的WinForms日历。它做你想要的,甚至更多。它被称为Another Month Calendar。