我希望能够显示默认值为空的DateTimePicker
,即没有日期。
例如,我有一个任务的开始日期dtTaskStart
和结束日期dtTaskEnd
,但结束日期未知,最初未填充。
我已为两个控件指定了自定义格式yyyy-MM-dd
。
在运行时将值设置为null
或空字符串会导致错误,那么我该如何实现呢?
我考虑使用复选框来控制此字段的启用,但仍然存在显示初始值的问题..
编辑:
可以说是问题DateTimePicker Null Value (.NET)的副本,但我找到的问题的解决方案不是该问题的解决方案,所以我认为它应该留在其他地方找到..
答案 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;
}
}
答案 6 :(得分:1)
听, 如果要显示空的datetimepicker并在用户未选择日期时为null,请在代码中进行以下更改,否则保存日期。
如果用户将与datetimepicker进行交互,则将调用其 VALUECHANGED 事件,并将其TAG属性设置为1。
现在保存时,检查其 TAG 是否为零,然后保存NULL日期,否则,如果 TAG 为1,则选择并保存Datetime选择器值。
它就像一种魅力。
现在,如果您希望通过用户交互将其值改回为空,则添加复选框并在此复选框中显示文本“清除”。 如果用户想清除日期,只需再次将其 CUSTOM FORMAT 属性设置为空字符串 “”,并将其 TAG 设置回0。 就是这样。
答案 7 :(得分:0)
最好使用文本框来调用/显示日期,并在保存时使用DateTimePicker。 根据要求使可见属性为真或为假。
例如:在表单加载期间,在文本框中输入“加载日期”,使DTPIcker不可见,反之亦然