0

我正在使用 VS2013 在 c# 中编写一个桌面应用程序。在我看来,我遇到了一个没有必要产生的荒谬错误。我以这种方式在代码中的某处设置了 DateTimePicker 的 MinDate 和 MaxDate 属性:

DateTime minDate = DateTime.Parse(...);
DateTime maxDate = DateTime.Parse(...);

...

if (maxDate < dtpManuelFirst.MinDate)
{
    dtpManuelFirst.MinDate = minDate;
    dtpManuelFirst.MaxDate = maxDate;
}
else
{
    if (minDate > dtpManuelFirst.MaxDate)
    {
        dtpManuelFirst.MaxDate = maxDate;
        dtpManuelFirst.MinDate = minDate;
    }
    else
    {
        dtpManuelFirst.MinDate = minDate;
        dtpManuelFirst.MaxDate = maxDate;
    }
}

最初我知道 minDate 值总是小于 maxDate 值。当 minDate 像第二个 if 条件一样大于 dtpManuelFirst.MaxDate 时,它​​会毫无问题地更新 MaxDate 属性,而我得到错误“值对 MinDate 无效。MinDate 必须小于 MaxDate。” 关于更新 MinDate 属性。这很荒谬,因为我已经在检查这些条件。此外,当我在调试模式下检查时,这些值不支持该错误。任何帮助都会很棒!

4

3 回答 3

0

你所有决定的最终结果是你总是在设定

dtpManuelFirst.MinDate = minDate;
dtpManuelFirst.MaxDate = maxDate;

为什么不立即这样做呢?当你做同样的事情时,你不需要所有那些 if-else 分支。

如果您仍然遇到问题,dtpManuelFirst.MaxDate请先将第一个设置为非常大的值。

dtpManuelFirst.MaxDate = DateTime.MaxValue;
dtpManuelFirst.MinDate = minDate;
dtpManuelFirst.MaxDate = maxDate;
于 2014-06-27T08:19:41.343 回答
0

在设置实际值之前,将 MinDate 设置为 DateTimePicker.MinDateTime 并将 Max Date 设置为 DateTimePicker.MaximumDateTime。如下所示:

dtpManuelFirst.MinDate = DateTimePicker.MinDateTime;
dtpManuelFirst.MaxDate = DateTimePicker.MaximumDateTime;

if (maxDate < dtpManuelFirst.MinDate)
{
  dtpManuelFirst.MinDate = minDate;
  dtpManuelFirst.MaxDate = maxDate;
}
else
{
   if (minDate > dtpManuelFirst.MaxDate)
   {
     dtpManuelFirst.MaxDate = maxDate;
     dtpManuelFirst.MinDate = minDate;
   }
  else
  {
    dtpManuelFirst.MinDate = minDate;
    dtpManuelFirst.MaxDate = maxDate;
  }
}
于 2020-12-30T07:56:58.140 回答
0

我知道这个线程已经很老了,但也许这可能会帮助下一个人......也许他们应该考虑添加“完整的”日期时间范围:包括小时、分钟和秒。

DateTime firstDayInMonth = new DateTime(today.Year, today.Month, 1, 0, 0, 0);

DateTime lastDayInMonth = new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month), 23, 59, 59);
于 2017-06-30T10:43:47.133 回答