vb.net - 如何识别用户是否单击了 DateTimePicker 日历中的日期

标签 vb.net winforms datepicker datetimepicker

当用户点击日历而不点击日期时,我不希望日期发生变化。问题是当日期选择器日历打开时,始终会选择一个日期。我正在寻找类似于日历控件中的 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/

相关文章:

c# - 如何制作自动调节控件?

asp.net - 将单选按钮列表绑定(bind)到 gridview 中的列

android - DatePickerDialog.OnDateSetListener 在三星设备上没有得到回调

asp.net-mvc - 在剑道内联编辑中仅显示日期选择器而不是日期时间选择器

.net - 工具栏上的文本按钮

wpf - 如何本地化 WPF 4.0 DatePicker 控件

vb.net - Windows 手机 8 : Load/Create HTML on the fly and load into browser

.net - 如何从 ASP.NET 应用程序的 web.config 文件中读取设置值?

c# - 为什么 Find() 方法返回一个数组?

c# - 禁用部分 SaveFileDialog