繁体   English   中英

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

[英]How to set win forms datetime picker to have no default value?

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

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

非常感谢。

看看这里的CodeProject上可为空的DateTimePicker,其实有几个在这里

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

您可以使用另一个控件禁用它,或者在用户单击之前禁用它(对于像我这样的键盘爱好者来说是糟糕的 UX),或者找到或创建(!)一个使用Nullable<DateTime>控件。

编辑:

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

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

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

我认为对您来说最好的解决方案是设置一个复选框,“按日期范围搜索”,它要么启用两个被禁用的 dtps,要么显示隐藏的 dtps。 然后,你从最小搜索到最大,除非该复选框被选中,当复选框选中,您可以使用这两个DTP日期,不管它们是什么。 不要忘记处理to and from乱序,这可以通过多种方式完成。

在每个日期时间选择器旁边放置一个复选框,并使用该复选框启用/禁用日期时间选择器。

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

您可以将DateDateTimePicker.Format属性设置为Custom

然后将DateDateTimePicker.CustomFormat属性设置为您的默认文本(例如"N/A"或空格" "

在用户选择了某个日期值后,您应该将 format 属性设置为 short 等。

例子

希望这可以帮助!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM