【问题标题】:ridicilous mindate maxdate error while settting datetime设置日期时间时出现可笑的最大日期错误
【发布时间】:2014-06-27 06:32:12
【问题描述】:

我正在使用 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 属性。这很荒谬,因为我已经在检查这些条件。此外,当我在调试模式下检查时,这些值不支持该错误。任何帮助都会很棒!

【问题讨论】:

    标签: c# datetimepicker maxdate mindate


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 它给出错误 19.04.2014 对 MinDate 无效。 MinDate 必须小于 MaxDate。但是,我为 MinDate 分配 18.04.2014,为 MaxDate 分配 19.04.2014。这绝对是荒谬的错误:(
    • @ceskin 但是你在MaxDate之前分配了MinDate。这似乎是原因。当您设置 MinDate 时,MaxDate 尚未设置为 19.04.2014,可能是其他值。
    【解决方案2】:

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

    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);
    

    【讨论】:

      【解决方案3】:

      在设置实际值之前,将 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;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 2015-12-12
        • 2013-07-26
        • 1970-01-01
        • 2015-04-12
        相关资源
        最近更新 更多