71

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

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

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

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

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

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

4

8 回答 8

59

只需将属性设置如下:

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

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

DateTimePicker1_ValueChanged事件做

dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"
于 2011-12-09T16:23:47.560 回答
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
于 2009-05-11T01:09:26.373 回答
23

这对我来说适用于 c#

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

不错的一个家伙!

于 2010-06-18T14:48:40.277 回答
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
于 2014-02-05T19:01:08.840 回答
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 已被验证为有效的日期字符串。

于 2016-01-09T01:41:38.203 回答
3

基本概念与其他人所说的相同。但是当您有多个 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;
            }
        }

未选中时 在此处输入图像描述

检查时 在此处输入图像描述

于 2017-05-16T16:48:13.963 回答
2

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

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

现在开始真正的工作

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

最后一步

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

它就像一个魅力。

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

于 2020-04-21T08:31:18.640 回答
0

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

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

于 2020-04-25T12:25:33.843 回答