如何让DateTimePicker显示空字符串?

时间:2009-05-11 00:49:25

标签: .net winforms datetimepicker

我希望能够显示默认值为空的DateTimePicker,即没有日期。

例如,我有一个任务的开始日期dtTaskStart和结束日期dtTaskEnd,但结束日期未知,最初未填充。

我已为两个控件指定了自定义格式yyyy-MM-dd

在运行时将值设置为null或空字符串会导致错误,那么我该如何实现呢?

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

编辑:
可以说是问题DateTimePicker Null Value (.NET)的副本,但我找到的问题的解决方案不是该问题的解决方案,所以我认为它应该留在其他地方找到..

8 个答案:

答案 0 :(得分:45)

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

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

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

DateTimePicker1_ValueChanged事件上执行

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

答案 1 :(得分:27)

使用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

答案 2 :(得分:20)

这适用于我#c

if (enableEndDateCheckBox.Checked == true)
{
    endDateDateTimePicker.Enabled = true;
    endDateDateTimePicker.Format = DateTimePickerFormat.Short;                
}
else
{
    endDateDateTimePicker.Enabled = false;
    endDateDateTimePicker.Format = DateTimePickerFormat.Custom;
    endDateDateTimePicker.CustomFormat = " ";
}
好的一个人!

答案 3 :(得分: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 :(得分: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已经被验证为有效的日期字符串。

答案 5 :(得分:2)

其他人讲的基本概念也是如此。但是当你有多个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)
        {
            if(((DateTimePicker)sender).ShowCheckBox==true)
            {
                if(((DateTimePicker)sender).Checked==false)
                {
                    ((DateTimePicker)sender).CustomFormat = " ";
                    ((DateTimePicker)sender).Format = DateTimePickerFormat.Custom;
                }
                else
                {
                    ((DateTimePicker)sender).Format = DateTimePickerFormat.Short;
                }
            }
            else
            {
                ((DateTimePicker)sender).Format = DateTimePickerFormat.Short;
            }
        }

未选中时 enter image description here

选中时 enter image description here

答案 6 :(得分:1)

听, 如果要显示空的datetimepicker并在用户未选择日期时为null,请在代码中进行以下更改,否则保存日期。

  1. 将datetimepicker FORMAT 属性设置为自定义。
  2. 自定义格式属性设置为空字符串“”。
  3. 默认将其 TAG 设置为0。
  4. 注册日期的事件。

现在开始真正的工作

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

最后一步

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

它就像一种魅力。

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

答案 7 :(得分:0)

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

例如:在表单加载期间,在文本框中输入“加载日期”,使DTPIcker不可见,反之亦然