我希望能够显示一个默认值为空的
DateTimePicker
,即没有日期。
例如,我有一个任务的开始日期
dtTaskStart
和结束日期 dtTaskEnd
,但结束日期未知,并且最初未填充。
我为两个控件指定了自定义格式
yyyy-MM-dd
。
将值设置为
null
,或者在运行时设置为空字符串会导致错误,那么我该如何完成此操作?
我考虑过使用复选框来控制该字段的启用,但仍然存在显示初始值的问题..
编辑:
可以说是问题DateTimePicker Null Value (.NET)的重复,但我为我的问题找到的解决方案并不是该问题的解决方案,所以我认为它应该保留在这里供其他人找到..
只需按如下方式设置属性即可:
当用户按下“清除按钮”或“删除键”时
dtpData.CustomFormat = " " 'An empty SPACE
dtpData.Format = DateTimePickerFormat.Custom
在
DateTimePicker1_ValueChanged
活动中
dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"
使用
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
这对我的 c# 有用
if (enableEndDateCheckBox.Checked == true)
{
endDateDateTimePicker.Enabled = true;
endDateDateTimePicker.Format = DateTimePickerFormat.Short;
}
else
{
endDateDateTimePicker.Enabled = false;
endDateDateTimePicker.Format = DateTimePickerFormat.Custom;
endDateDateTimePicker.CustomFormat = " ";
}
好人!
如果有人在表单加载事件期间将 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)
{
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;
}
}
听着, 如果您想显示空的日期时间选择器并在用户未选择日期时获取 null,请在代码中进行以下更改,否则保存日期。
如果用户将与 datetimepicker 交互,其 VALUECHANGED 事件将被调用,并将其 TAG 属性设置为 1。
现在保存时,检查其 TAG 是否为零,然后保存 NULL 日期,否则如果 TAG 为 1,则选择并保存日期时间选择器值。
它就像一个魅力。
现在,如果您希望通过用户交互将其值更改回空,请添加复选框并使用此复选框显示文本“清除”。 如果用户想要清除日期,只需再次将其 CUSTOM FORMAT 属性设置为空字符串 “”,并将其TAG设置回0。 就是这样..
最好使用文本框来调用/显示日期,并在保存时使用 DateTimePicker。 根据要求将可见属性设为 true 或 false。
例如:在表单加载期间,在文本框中加载日期并使 DTPIcker 不可见,而添加时反之亦然