当用户点击日历而不点击日期时,我不希望日期发生变化。问题是当日期选择器日历打开时,始终会选择一个日期。我正在寻找类似于日历控件中的 DateSelected 事件的内容
我有一个派生自 DateTimePicker 的类,它使用带有空格字符串的自定义格式来为 DateTimePicker 提供空字段。
我在 stackoverflow 中发现了一篇文章有同样的问题,但解决方案不起作用。我也没有足够的积分来发表评论(现在找不到链接:( )
就代码而言,这就是我所拥有的
Public Class CustomDP
Inherits System.Windows.Forms.DateTimePicker
Public Sub New()
CustomFormat = " "
Format = System.Windows.Forms.DateTimePickerFormat.Custom
End Sub
Protected Overrides Sub OnValueChanged(eventargs As System.EventArgs)
MyBase.OnValueChanged(eventargs)
End Sub
Protected Overrides Sub OnCloseUp(eventargs As System.EventArgs)
Format = DateTimePickerFormat.Short
MyBase.OnCloseUp(eventargs)
End Sub
Protected Overrides Sub OnDropDown(eventargs As System.EventArgs)
Format = DateTimePickerFormat.Custom
MyBase.OnDropDown(eventargs)
End Sub
End Class
最佳答案
CodeProject 上至少有 1 个允许可为 Null 的日期的 DateTimePicker
控件。但还有比这更简单的方法。
在设计中,将ShowCheckBox
设置为True。然后,当加载表单或重置字段时,将 Checked
设置为 False。这使得 DTP 看起来被禁用,这有点不幸,但当用户打开 DTP 时,该复选框会自动选中。因此,要查看他们是否选择了日期,您所需要做的就是评估 Checked
属性。如果他们在选择有效日期后碰巧取消选中该值,则禁用的外观最终表明该值实际上并不重要。
如果您使用较小的版本 (ShowUpDown
),则该控件将禁用,直到他们首先单击该复选框,然后选择要旋转的字段。对于每个字段的每次更改,您仍然会收到一个值更改事件,但这就是它应该如何工作。该控件始终具有有效的日期值,因此您不必检查 Nothing
等。
关于vb.net - 如何识别用户是否单击了 DateTimePicker 日历中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726994/