日视图日历控件






4.86/5 (148投票s)
一个日历 DayView 控件。
引言
本文介绍了如何创建一个日视图控件,以便在所需的应用程序中可视化日程安排功能。 我克隆了 Outlook 日视图的外观以供类似使用。 这是一个屏幕截图
Office 12 主题
Office XP 主题
背景
在编写这个控件之前,我需要一个看起来像 Outlook 中的日视图控件。 我找到了一些商业工具包,但没有一个满足我的要求。 其中一些要求在显示控件之前给出所有约会,有些不是开源的等等。 所以我写了这个控件,是 "匆忙开发"的,我认为其他人可以使用它。 回报使用 CodeProject 的时间 :)
我们有什么?
- 您可以创建您的约会类来保存特殊信息(除了开始、结束日期和标题之外)。
- 您不需要从数据库或类似的东西中读取所有约会。
- 您可以指定将显示多少天。
- 您可以对约会进行着色以显示不同的视图。
- 就地编辑。
- 拖放操作。
- 没有 Win32 API。
- 基于主题的渲染。
顺便说一句,它是在 .NET 2.0 的最终版本下编译的。 如果您没有,您需要重新编译该项目。
使用代码
该控件使用一个名为 "Appointment
" 的类来可视化视图。 DayView
控件不关注将约会保存到数据库或获取它们。 因此,您需要编写自己的数据库逻辑并响应事件。
该控件实现了这些事件以与宿主应用程序交互
dayView1.NewAppointment
dayView1.ResolveAppointments
dayView1.SelectionChanged
示例应用程序使用列表集合作为约会的容器。 您也可以使用缓存的数据库源。
NewAppointment 事件
当用户想要创建一个约会时,会引发此事件。 事件参数包含新约会的开始日期、结束日期和标题值。 您可以创建从 DayView.Appointment
基类继承的约会类。
示例应用程序只是创建一个新约会,并将其添加到列表集合中。
void dayView1_NewAppointment(object sender, NewAppointmentEventArgs args)
{
Appointment m_Appointment = new Appointment();
m_Appointment.StartDate = args.StartDate;
m_Appointment.EndDate = args.EndDate;
m_Appointment.Title = args.Title;
m_Appointments.Add(m_Appointment);
}
ResolveAppointments 事件
当 DayView
控件需要在某个日期显示约会时,会引发此事件。 事件参数包含所需日期范围的开始日期和结束日期。
示例应用程序扫描列表集合以查找指定的日期范围。 您也可以从您自己的数据库中获取它们。
private void dayView1_ResolveAppointments(object sender,
ResolveAppointmentsEventArgs args)
{
List<Appointment> m_Apps = new List<Appointment>();
foreach (Appointment m_App in m_Appointments)
if ((m_App.StartDate >= args.StartDate) &&
(m_App.StartDate <= args.EndDate))
m_Apps.Add(m_App);
args.Appointments = m_Apps;
}
Selection Changed 事件
当用户选择一个约会时,会引发此事件。
private void dayView1_SelectionChanged(object sender, EventArgs e)
{
label3.Text = dayView1.SelectionStart.ToString() +
":" + dayView1.SelectionEnd.ToString();
}
示例应用程序在标签中显示所选约会的开始日期和结束日期。
关注点
当我编写这个控件时,最困难的部分是在屏幕上对约会进行排序而不交叉。 该控件在内部使用 "AppointmentView
" 类来保存屏幕上约会的状态。 其余代码是绘制和与外部应用程序隔离。
您可能会看到一些关于全天事件的注释代码,但目前全天事件尚未完成。 当我完成它时,我会更新这篇文章。(感谢 Claus Espersen 实施 Office 12 主题和错误修复。)
历史
- 14.07.2006
- 错误修复。
- 已实现开始小时和开始分钟属性。
- 已实现基于主题的渲染。
- 已实现
AllowNew
属性。 - 修复了鼠标拖放错误。
- 全天事件的内部更改。
- 已实现缩放功能。
- 11.09.2005
- 初始发布。