如何将 win 表单日期时间选择器设置为没有默认值?

eom*_*off 5 c# datepicker winforms

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

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

非常感谢。

Jay*_*Jay 2

您不可能拥有一个带有开箱即用控件的无价值日期选择器。为什么?它由不可为 null 的 DateTime 支持。

您可以使用其他控件禁用它,或者将其保持禁用状态,直到用户单击(对于像我这样的键盘爱好者来说,用户体验很糟糕),或者找到或创建(!)一个使用Nullable<DateTime>.

编辑:

针对您的评论,是的,您可以这样做;事实上,我已经做到了。

  • 使用字段或私有属性来保存“从”和“到”日期,而不是从 dtp 读取它们,并将它们的默认值设置为最小和最大
  • 使用布尔标志来指示何时在代码中操作 dtp 值,并在 dtpValueChanged事件中将该标志的值设置为 false
  • 在表单加载事件中,将标志设置为 true 并将 dtp 值设置为今天的日期
  • 同样在这种ValueChanged情况下,将fromto字段设置为 dtp 的值(当任一 dtp 更改时,您必须同时设置这两个值,因为用户将看到另一个设置为今天,但搜索值仍为最小值或最大值) 。

这样做的问题是,一旦用户更改了日期选择,她就无法轻松返回“所有日期”。此外,如果用户不首先更改其中一个日期然后再将其更改回来,则无法选择“仅限今天”。

我认为对您来说最好的解决方案是有一个复选框“按日期范围搜索”,它可以启用两个否则禁用的 dtps,或者显示否则隐藏的 dtps。然后,除非选中该复选框,否则您将从最小到最大进行搜索,并且当选中该复选框时您将使用两个 dtp 日期,无论它们是什么。不要忘记处理to失序from的情况,这可以通过多种方式来完成。