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

Nap*_*oli 4 c# monthcalendar winforms

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

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

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

Han*_*ant 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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


JDB*_*JDB 0

假设您正在使用 WPF...

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

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

有很多第三方工具,但无论您使用哪种控件,核心问题都将仍然存在:您希望用户了解所有选定的项目,但您不希望显示包含某个项目的每个月。同时选择一天。我能想到的最好答案是一个列表。