如何设置win form datetime picker没有默认值?

我正在WinForms中实现搜索function,我按日期范围搜索。 因此,表单上有dateForm和dateTo日期选择器。 默认情况下,它们的值是日期时间now(),如果用户根本没有触摸日期时间选择器,他将不会得到任何结果。 因为搜索将在now()和now()之间执行,所以如果我将min和max值设置为默认值,它将解决第一个问题但如果用户想要按日期范围搜索会出现另一个问题,他需要点击许多时间从默认1700(某事物)到现在()

有什么建议可以解决这个问题?

非常感谢。

你不能拥有一个没有价值的日期选择器和开箱即用的控件。 为什么? 它由DateTime支持,它是不可为空的。

您可以使用其他控件禁用它,或者在用户单击之前将其禁用(键盘爱好者的不良用户体验,例如我自己),或查找或创建(!)使用Nullable

编辑:

回答你的评论,是的,你可以这样做; 事实上,我已经做到了。

  • 使用字段或私有属性来保存’from’和’to’日期,而不是从dtp中读取它们,并将其默认值设置为min和max
  • 使用布尔标志来指示何时在代码中操作dtp值,并在dtp的ValueChanged事件中,将flag的值设置为false
  • 在表单加载事件中,将标志设置为true,将dtp值设置为今天的日期
  • 同样在ValueChanged事件中,将fromto字段设置为dtps的值(当dtp更改时你必须设置两者,因为用户将看到另一个设置为今天,但搜索值仍然是min或最大)。

这样做的问题是,一旦用户更改了日期选择,她就不能轻易回到“所有日期”。 此外,用户不能在不首先更改其中一个日期然后将其更改回来的情况下选择“仅今天”。

我认为最好的解决方案是有一个复选框,“按日期范围搜索”,它可以启用另外禁用的两个dtps,或者显示隐藏的dtps。 然后,除非选中该复选框,否则从最小值到最大值进行搜索,选中该复选框后,无论它们是什么,都使用两个dtp日期。 不要忘记处理乱序,可以通过多种方式处理。

看看CodeProject上有一个可以为空的datetimepicker,其实这里有一些。

选中每个日期时间选择器旁边的复选框,然后使用复选框启用/禁用日期时间选择器。

因此,如果禁用datetimepicker,则您知道用户不想指定日期时间。

DateTimePicker具有ShowCheckBox属性,该属性“确定控件中是否显示复选框。如果未选中此框,则不会选择任何值。”

对于可以为空的日期范围选择器,我使用了类似下面的内容。 一位用户告诉我,起初,她不知道复选框的用途是什么,但在使用它几次之后她自己想出来了。

 public DateTime? EndDate { get { DateTime? returnValue = null; if (endDateDateTimePicker.Checked) { returnValue = endDateDateTimePicker.Value; } return returnValue; } set { if (value.HasValue) { endDateDateTimePicker.Checked = true; endDateDateTimePicker.Value = value.Value; } else { endDateDateTimePicker.Checked = false; } } } 

您可以将DateDateTimePicker.format属性设置为custom。 然后在DateDateTimePicker.customformat属性下,您可以设置默认文本,例如“N / A”或sapce“”。 用户选择了某个日期值后,您应该将format属性设置为short等。

http://sofzh.miximages.com/c%23/Z1QB5.png

希望这可以帮助!