【问题标题】:Programmatically setting back color to specific days in a calender for windows application以编程方式将颜色设置为 Windows 应用程序日历中的特定日期
【发布时间】:2015-01-31 10:08:22
【问题描述】:

我正在创建一个 Windows 应用程序,在该应用程序中我使用默认日历进行约会。我想检查日历的每一天,并为其中一些设置背景颜色,以将其与其他日期区分开来,例如可用、约会结束、节假日等。

我搜了一下,发现使用OnDayRender事件来改变某些日子的BackColor是可以的。但我的理解是它仅适用于 Web 表单,不适用于窗口表单。在winforms中是否有相同或任何替代方法的解决方案? (如使用内嵌的WPF控件等)

【问题讨论】:

  • 网上有几个这样的例子..你真的执行过Google搜索吗..?这是一个编码项目,您可以使用来自 codeproject.com/Articles/10840/Another-Month-Calendar 的代码
  • 谢谢MethodMan!我成功地做到了。但是控件响应时间太长。有什么帮助吗??

标签: c# winforms


【解决方案1】:

也许你可以这样做:

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;
    }
}

【讨论】:

    【解决方案2】:

    在 WinForms 中没有简单的方法来做到这一点。

    一种选择是创建您自己的继承自MonthCalendar 控件的日历。您将不得不覆盖 OnPaint 方法。在该方法中,您必须为要更改背景的每个日期本地化 Rectangle,然后更改它(背景)。在here 中可以找到使用OnPaintWndProc 覆盖创建您自己的日历控件的示例。该示例并不能完全满足您的要求,但这是一个良好的开端。

    但是还有另一种选择。您不是第一个在日历控件中搜索此功能的人。所以有人已经创建了一个高度可定制的 WinForms 日历。它可以满足您的需求以及更多功能。它叫Another Month Calendar

    【讨论】:

    • 谢谢,Another Month Calender 是我需要的解决方案。但是响应时间太长,如何解决?
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多