如何使 DateTimePicker 显示空字符串?

我希望能够显示一个没有默认值(即没有日期)的 DateTimePicker

例如,对于任务,我有一个开始日期 dtTaskStart和一个结束日期 dtTaskEnd,但是结束日期不知道,而且最初也没有填充。

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

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

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

编辑:
可以说是问题 DateTimePicker 空值(. NET)的一个副本,但是我找到的解决我的问题的方法并不是这个问题的解决方法,所以我认为它应该留在这里让其他人找到。.

207481 次浏览

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

这对我来说很管用

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

干得好,伙计们!

只需将属性设置如下:

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

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

DateTimePicker1_ValueChanged事件做

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

如果任何人在表单加载事件期间将 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

当我想显示一个空的日期值时,我这样做

            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 已被验证为有效的日期字符串。

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

听着, 如果希望显示空的 datetimepicker,并且当用户没有选择日期时得到 null,则在代码中进行以下更改,否则保存日期。

  1. 将 datetimepicker 格式属性设置为自定义。
  2. 自定义格式属性设置为空字符串“”。
  3. 默认情况下将其 标签设置为0。
  4. 为 datetimepicker 注册事件

现在真正的工作开始了

如果用户将与 datetimepicker 交互,它的 价值改变了事件将被调用,并将其 TAG 属性设置为1。

最后一步

现在保存时,检查它的 标签是否为零,如果 标签为1,则保存 NULL date else,然后选择并保存 Datetime picker 值。

效果非常好。

现在,如果您希望通过用户交互将其值修改为空,那么添加复选框并使用该复选框显示文本“ Clear”。 如果用户希望清除日期,只需再次将其 自定义格式属性设置为空字符串 并将其“ 标签”设置为0。 就是这样。

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

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