月历突出显示我不想要的日期?

时间:2014-03-10 04:58:55

标签: c# winforms

我创建了以下一组月历控件:

enter image description here

最新的日历控件集,用于标识从2014年2月到2月后任意月份的课程的开始和结束。

我在表单

的Load()事件中有如下代码
DateTime dtSem1 = new DateTime(mcSem1Start.SelectionRange.Start.Year, 2, 1);
DateTime dtSem2 = new DateTime(mcSem2Start.SelectionRange.Start.Year, 6, 1);

mcSem1Start.SelectionStart = dtSem1;
mcSem1End.SelectionStart = dtSem1.AddMonths(1);

mcSem2Start.SelectionStart = dtSem2;
mcSem2End.SelectionStart = dtSem2.AddMonths(1);

mcSem1Start_DateChanged(mcSem1Start, new DateRangeEventArgs(dtSem1, dtSem1));
mcSem2Start_DateChanged(mcSem2Start, new DateRangeEventArgs(dtSem2, dtSem2));

如您所见,我已将第一行的第一个月日历的日期设置为2月1日,第二个日期为3月1日。但是这些日期范围之间有一个突出显示,但我没有编码突出显示它们,为什么它突出显示日期范围以及如何解决它?

谢谢

2 个答案:

答案 0 :(得分:1)

当您仅设置SelectionStart而没有设置SelectionEnd时,它会自动选择等于MaxSelectionCount值的天数范围。

在设置任何开始日期之前将该值设置为1可解决问题:

mcSem1Start.MaxSelectionCount = 1;
mcSem1End.MaxSelectionCount = 1;

mcSem2Start.MaxSelectionCount = 1;
mcSem2End.MaxSelectionCount = 1;

或者,您可以设置同一天的结束日期:

mcSem1Start.SelectionStart = dtSem1;
mcSem1Start.SelectionEnd = dtSem1;

mcSem1End.SelectionStart = dtSem1.AddMonths(1);
mcSem1End.SelectionEnd = dtSem1.AddMonths(1);

或者你可以选择只有一天的“范围”:

mcSem1Start.SelectionRange = new SelectionRange(dtSem1, dtSem1);

var nextMonth = dtSem1.AddMonths(1);
mcSem1End.SelectionRange = new SelectionRange(nextMonth, nextMonth);

答案 1 :(得分:0)

您正在控件上设置SelectionStart。现在,默认情况下MonthCalendar的选择计数为7.这意味着您可以选择7天的日期范围。因此,如果您设置开始日期,将自动设置结束日期。

现在,您可以将MaxSelectionCount设置为1.但这意味着用户只能选择一天。如果您的目标是不显示任何突出显示并使用更长的选择范围,请同时设置SelectionEnd

另外,如果能更好地满足您的需求,请查看DateTimePicker控件。