我正在制作一个程序,帮助人们“预订”C#部门的订单。他们需要能够在不同的月份选择多个日期。
我更愿意拥有它,以便他们可以点击日期,然后按住另一个选择这两个之间的所有日期,并控制点击,进行单一选择/取消选择。他们必须能够在几个月之间移动,同时仍然保留他们上个月点击的所有日期,这样他们就可以概览他们选择的日期以使其更容易。
最好的方法是什么?我应该使用Visual Studio的默认月份日历还是存在更灵活的日历?
答案 0 :(得分:8)
您可以通过检测日期点击,然后在加粗日期中添加或删除点击日期来使其工作。实现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();
}
}
这只是一个问题,它像一个便宜的汽车旅馆一样闪烁。没有解决方法。
答案 1 :(得分:2)
WinForms MonthCalendar支持从开始到结束选择范围,但不支持使用Ctrl选择(de)各个日期。所以它似乎不符合你的要求。
快速说明:如果您调整MonthCalendar的大小,它将显示更多月份。加上nobugz的回答可能会给你一个有效的解决方案。
答案 2 :(得分:0)
假设您正在使用WPF ...
我建议您创建一个简单的ListBox并将ItemsSource属性绑定到Calendar的SelectedDates属性。当用户从日历中选择和取消选择日期时,它们将被添加到列表中或从列表中删除。
此外,您可以创建一个DateSpan类和一个ValueConverter,将一系列日期分组到DateSpan类中。然后,您可以将转换器应用于SelectedDates属性,以便当用户使用Shift-Select时,它们将看到日期跨度而不是一堆日期(假设这是一件坏事)。逻辑不会太复杂。
有很多第三方工具,但无论您使用哪种控件,核心问题都将保留:您希望用户了解所有选定的项目,但您不希望每个月都显示包含选定日期的同一天。我能想到的最佳答案就是清单。