【问题标题】:C# and Month Calendar, selecting multiple datesC# 和月历,选择多个日期
【发布时间】:2010-12-16 20:46:50
【问题描述】:

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

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

最好的方法是什么?我应该使用 Visual Studio 的默认月历还是有更灵活的月历?

【问题讨论】:

  • 它将在 Windows 上运行,没有网络表单。
  • 那不勒斯,“Windows”仍然可以是 WinForms 或 WPF。两者都将是比“工作室”更有用的标签。

标签: c# winforms monthcalendar


【解决方案1】:

您可以通过检测日期的点击来使其工作,然后从粗体日期中添加或删除点击的日期。实现 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();
  }
}

这只是一个问题,它像廉价汽车旅馆一样闪烁。没有解决办法。

【讨论】:

    【解决方案2】:

    WinForms MonthCalendar 支持从 Start 到 End 选择范围,但不支持使用 Ctrl (取消)选择单个日期。所以看起来不符合你的要求。

    请注意:如果您调整 MonthCalendar 的大小,它将显示更多月份。连同 nobugz 的回答,这可能会给你一个可行的解决方案。

    【讨论】:

      【解决方案3】:

      假设您正在使用 WPF...

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

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

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

      【讨论】:

      • 我正在使用适用于 .NET 3.5 的 WPF 工具包,但我可以将日历的 SelectionMode 属性设置为“MultipleRange”,这样就可以选择多个范围。 DisplayDateStart 和 DisplayDateEnd 属性允许您设置可以选择的日期范围(例如,将 DisplayDateStart 设置为 2010 年 1 月 1 日会阻止用户选择 2010 年 1 月 1 日之前的日期)
      • 有趣...我的 monthCalendar 对象没有“SelectionMode”属性
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多