【问题标题】:How can I programmatically close/dismiss the dropdown calendar of a datetimepicker on ValueChanged event?如何在 ValueChanged 事件中以编程方式关闭/关闭 datetimepicker 的下拉日历?
【发布时间】:2015-01-16 07:51:18
【问题描述】:

处理一个包含大量 DateTimePicker 控件的 Windows 窗体项目。

要求是在表单加载时,日期控制器是“空的”,没有预先选择或填充日期。 我们通过将日期设置为“昨天”和自定义日期格式“”来实现这一点。这给了我们一个空白的加载日期。

这一切都很好,但是我们现在注意到,当用户第一次选择/单击控制器并选择新日期时,所选日期由日历本身填充,不会关闭。

然后,用户需要在控制器外部单击以关闭日历(因为在此状态下,日历大多对任何进一步的选择都没有响应)。

一旦他手动关闭,单击控制器并第二次选择日期会自动关闭日历。

日历似乎只是在第一个状态下不会关闭。可能是由于将自定义格式更改为新选择的格式导致日历获取?我不确定..

正在查看 DateTimePicker 的事件和方法,但找不到任何我可以调用来关闭日历(如果它当前处于打开状态)的内容。

谢谢!

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    在我的机器上的 Windows 8.1 上没有重现。如果 CustomFormat 属性设置为“”,它也不是“空白”,它默认为 dd/MM/yyyy。

    Windows 版本很重要,此控件已在各个版本中进行了重大修改。它是 Windows 本身的一个重要控件,是用户在安装操作系统时与之交互的第一个控件。并由任务栏中的时钟小程序使用。

    文字在墙上,即使它在您的机器上看起来“空白”,但它不会出现在您用户的机器上。考虑到额外的故障模式,CustomFormat 是一个麻烦的属性,需要在更改时重新创建窗口,追求这一点毫无意义。如果它很痛,那就不要这样做。没有用户会认为 1900 年 1 月 1 日是有效日期。一个简单的替代方案是让 DTP 与标签重叠。也许在用户控件中。只需在输入有效日期时隐藏标签。可空 DTP 是 codeproject.com 最受欢迎的项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2021-11-19
      • 2018-03-02
      • 1970-01-01
      • 2011-07-15
      • 2015-11-26
      相关资源
      最近更新 更多