C#和月历,选择多个日期

我正在制作一个程序,帮助人们“预订”C#部门的订单。 他们需要能够在不同的月份选择多个日期。

我更愿意拥有它,以便他们可以点击日期,然后转移单击另一个以选择这两个之间的所有日期,并控制点击,以进行单个选择/取消选择。 他们必须能够在几个月之间移动,同时仍然保留他们上个月点击的所有日期,这样他们就可以概览他们选择的日期以使其更容易。

做这个的最好方式是什么? 我应该使用Visual Studio的默认月份日历还是存在更灵活的日历?

您可以通过检测日期点击,然后在粗体日期中添加或删除点击日期来使其工作。 实现MonthCalendar的MouseDown事件:

private void monthCalendar1_MouseDown(object sender, MouseEventArgs e) { MonthCalendar.HitTestInfo info = monthCalendar1.HitTest(e.Location); if (info.HitArea == MonthCalendar.HitArea.Date) { if (monthCalendar1.BoldedDates.Contains(info.Time)) monthCalendar1.RemoveBoldedDate(info.Time); else monthCalendar1.AddBoldedDate(info.Time); monthCalendar1.UpdateBoldedDates(); } } 

这只是一个问题,它像一个便宜的汽车旅馆一样闪烁。 没有解决这个问题。

WinForms MonthCalendar支持从开始到结束选择范围,但不支持使用Ctrl选择(de)各个日期。 所以它似乎不符合您的要求。

只需快速说明:如果您调整MonthCalendar的大小,它将显示更多月份。 与nobugz的回答一起,可能会给你一个有效的解决方案。

假设您正在使用WPF …

我建议您创建一个简单的ListBox并将ItemsSource属性绑定到Calendar的SelectedDates属性。 当用户从日历中选择和取消选择天数时,它们将被添加到列表中或从列表中删除。

此外,您可以创建DateSpan类和ValueConverter,以将系列中的日期分组到DateSpan类中。 然后,您可以将转换器应用于SelectedDates属性,以便当用户使用Shift-Select时,它们将看到日期跨度而不是一堆日期(假设这是一件坏事)。 逻辑不会太复杂。

有很多第三方工具,但无论您使用哪种控件,核心问题都将保留:您希望用户知道所有选定的项目,但您不希望每个月都显示包含选定的一天同时。 我能想到的最佳答案就是列表。