如何让 DateTimePicker 显示空字符串?

问题描述 投票:0回答:8

我希望能够显示一个默认值为空的

DateTimePicker
,即没有日期。

例如,我有一个任务的开始日期

dtTaskStart
和结束日期
dtTaskEnd
,但结束日期未知,并且最初未填充。

我为两个控件指定了自定义格式

yyyy-MM-dd

将值设置为

null
,或者在运行时设置为空字符串会导致错误,那么我该如何完成此操作?

我考虑过使用复选框来控制该字段的启用,但仍然存在显示初始值的问题..

编辑:
可以说是问题DateTimePicker Null Value (.NET)的重复,但我为我的问题找到的解决方案并不是该问题的解决方案,所以我认为它应该保留在这里供其他人找到..

.net winforms datetimepicker
8个回答
64
投票

只需按如下方式设置属性即可:

当用户按下“清除按钮”或“删除键”时

dtpData.CustomFormat = " "  'An empty SPACE
dtpData.Format = DateTimePickerFormat.Custom

DateTimePicker1_ValueChanged
活动中

dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"

28
投票

使用

CustomFormat
属性来混淆该值,使用复选框
cbEnableEndDate
作为标志来指示其他代码是否应忽略该值:

If dateTaskEnd > Date.FromOADate(0) Then
    dtTaskEnd.Format = DateTimePickerFormat.Custom
    dtTaskEnd.CustomFormat = "yyyy-MM-dd"
    dtTaskEnd.Value = dateTaskEnd 
    dtTaskEnd.Enabled = True
    cbEnableEndDate.Checked = True
Else
    dtTaskEnd.Format = DateTimePickerFormat.Custom
    dtTaskEnd.CustomFormat = " "
    dtTaskEnd.Value = Date.FromOADate(0)
    dtTaskEnd.Enabled = False
    cbEnableEndDate.Checked = False
End If

24
投票

这对我的 c# 有用

if (enableEndDateCheckBox.Checked == true)
{
    endDateDateTimePicker.Enabled = true;
    endDateDateTimePicker.Format = DateTimePickerFormat.Short;                
}
else
{
    endDateDateTimePicker.Enabled = false;
    endDateDateTimePicker.Format = DateTimePickerFormat.Custom;
    endDateDateTimePicker.CustomFormat = " ";
}

好人!


5
投票

如果有人在表单加载事件期间将 datetimepicker 控件设置为空白,然后根据需要显示当前日期有问题,这里是一个示例:

确保

CustomFormat = "    "
在两种方法中具有相同数量的空格(至少一个空格)

Private Sub setDateTimePickerBlank(ByVal dateTimePicker As DateTimePicker)    

    dateTimePicker.Visible = True
    dateTimePicker.Format = DateTimePickerFormat.Custom
    dateTimePicker.CustomFormat = "    " 
End Sub


Private Sub dateTimePicker_MouseHover(ByVal sender As Object, ByVal e As 
                    System.EventArgs) Handles dateTimePicker.MouseHover

    Dim dateTimePicker As DateTimePicker = CType(sender, DateTimePicker)
    If dateTimePicker.Text = "    " Then
        dateTimePicker.Text = Format(DateTime.Now, "MM/dd/yyyy")
    End If
End Sub

4
投票

当我想显示空日期值时,我会这样做

            if (sStrDate != "")
            {
                dateCreated.Value = DateTime.Parse(sStrDate);
            }
            else
            {
                dateCreated.CustomFormat = " ";
                dateCreated.Format = DateTimePickerFormat.Custom;
            }

然后,当用户单击控件时,我会看到:

            private void dateControl_MouseDown(object sender, MouseEventArgs e)
            {
                ((DateTimePicker)sender).Format = DateTimePickerFormat.Long;    
            }

这允许您显示和使用空日期值,但仍然允许用户能够根据需要将日期更改为其他日期。

请记住,sStrDate 已被验证为有效的日期字符串。


4
投票

基本概念和别人讲的一样。但当你有多个 dateTimePicker 时,这种方式实现起来更容易。

dateTimePicker1.Value = DateTime.Now;
dateTimePicker1.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged);
dateTimePicker1.ShowCheckBox=true;
dateTimePicker1.Checked=false;


dateTimePicker2.Value = DateTime.Now;
dateTimePicker2.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged);
dateTimePicker2.ShowCheckBox=true;
dateTimePicker2.Checked=false;

值改变事件函数

        void Dtp_ValueChanged(object sender, EventArgs e)
        {
            DateTimePicker dtp = (DateTimePicker)sender;
            if (dtp.ShowCheckBox)
            {
                if (dtp.Checked)
                {
                    dtp.Format = DateTimePickerFormat.Short;
                }
                else
                {
                    dtp.CustomFormat = " ";
                    dtp.Format = DateTimePickerFormat.Custom;
                }
            }
            else
            {
                dtp.Format = DateTimePickerFormat.Short;
            }
        }

未选中时

检查时


2
投票

听着, 如果您想显示空的日期时间选择器并在用户未选择日期时获取 null,请在代码中进行以下更改,否则保存日期。

  1. 将 datetimepicker FORMAT 属性设置为自定义。
  2. CUSTOM FORMAT 属性设置为空字符串“”。
  3. 将其TAG默认设置为0。
  4. 为日期时间选择器VALUECHANGED注册事件

现在真正的工作开始了

如果用户将与 datetimepicker 交互,其 VALUECHANGED 事件将被调用,并将其 TAG 属性设置为 1。

最后一步

现在保存时,检查其 TAG 是否为零,然后保存 NULL 日期,否则如果 TAG 为 1,则选择并保存日期时间选择器值。

它就像一个魅力。

现在,如果您希望通过用户交互将其值更改回空,请添加复选框并使用此复选框显示文本“清除”。 如果用户想要清除日期,只需再次将其 CUSTOM FORMAT 属性设置为空字符串 “”,并将其TAG设置回0。 就是这样..


0
投票

最好使用文本框来调用/显示日期,并在保存时使用 DateTimePicker。 根据要求将可见属性设为 true 或 false。

例如:在表单加载期间,在文本框中加载日期并使 DTPIcker 不可见,而添加时反之亦然

© www.soinside.com 2019 - 2024. All rights reserved.