.net 如何使DateTimePicker显示空字符串?
我希望能够显示默认值为nothing(无日期)的.net 如何使DateTimePicker显示空字符串?,.net,winforms,datetimepicker,.net,Winforms,Datetimepicker,我希望能够显示默认值为nothing(无日期)的DateTimePicker 例如,对于任务,我有一个开始日期dtTaskStart和一个结束日期dtTaskEnd,但结束日期未知,并且最初没有填充 我为这两个控件指定了自定义格式yyyy-MM-dd 将值设置为null,或者在运行时设置空字符串会导致错误,那么我如何才能做到这一点 我曾考虑使用复选框来控制此字段的启用,但仍然存在显示初始值的问题 编辑: 可以说是问题的重复,但我为我的问题找到的解决方案不是该问题的解决方案,因此我认为应该留在这里
DateTimePicker
例如,对于任务,我有一个开始日期dtTaskStart
和一个结束日期dtTaskEnd
,但结束日期未知,并且最初没有填充
我为这两个控件指定了自定义格式yyyy-MM-dd
将值设置为null
,或者在运行时设置空字符串会导致错误,那么我如何才能做到这一点
我曾考虑使用复选框来控制此字段的启用,但仍然存在显示初始值的问题
编辑:可以说是问题的重复,但我为我的问题找到的解决方案不是该问题的解决方案,因此我认为应该留在这里让其他人找到..通过使用
CustomFormat
属性模糊值,使用复选框cbEnableEndDate
作为标志,指示其他代码是否应忽略该值:
如果dateTaskEnd>Date.FromOADate(0),则
dtTaskEnd.Format=DateTimePickerFormat.Custom
dtTaskEnd.CustomFormat=“yyyy-MM-dd”
dtTaskEnd.Value=dateTaskEnd
dtTaskEnd.Enabled=True
cbEnableEndDate.Checked=True
其他的
dtTaskEnd.Format=DateTimePickerFormat.Custom
dtTaskEnd.CustomFormat=“”
dtTaskEnd.Value=Date.FromOADate(0)
dtTaskEnd.Enabled=False
cbEnableEndDate.Checked=False
如果结束
这对我来说在c#
好家伙 只需按如下方式设置属性: 当用户按下“清除按钮”或“删除键”时
dtpData.CustomFormat=“”是一个空白
dtpData.Format=DateTimePickerFormat.Custom
在DateTimePicker1\u值已更改的事件上
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;
}
}
不检查时
检查时
听着,
如果要显示空的datetimepicker,并且在用户未选择日期时获取null,请在代码中进行以下更改,否则保存日期
将datetimepickerFORMAT属性设置为custom
将自定义格式属性设置为空字符串“”
默认情况下,将其标记设置为0
为datetimepicker值更改注册事件
现在真正的工作开始了
如果用户将与datetimepicker交互,则将调用其VALUECHANGED事件,并将其TAG属性设置为1
最后一步
现在保存时,检查其标记是否为零,然后保存空日期,否则如果标记是否为1,则选择并保存日期时间选择器值
它就像一个符咒
现在,如果您希望通过用户交互将其值更改回空,则添加复选框并使用此复选框显示文本“Clear”。
如果用户想要清除日期,只需再次将其自定义格式属性设置为空字符串
,并将其标记设置回0。
就是这样。最好使用文本框调用/显示日期,并在保存时使用日期时间选择器。
根据要求使可见属性为真或假
例如:在表单加载过程中,在文本框中设置加载日期,使DTPIcker不可见,反之亦然,添加DTPIcker可能是重复的,我想您需要在这里编辑一下格式。@Catherine标准是变量名以小写字母开头。更改此选项可以改进格式设置,因为这是堆栈溢出对.NET的期望。@Three-FouroneSixoneThree-我想这是因为它似乎是最合适的。我没有资格发表评论。它还可以设置dtpData.Format=DateTimePickerFormat.Short
(或其他格式),而不是dtpData.CustomFormat=“dd/MM/yyyyy hh:MM:ss”
如果日期选择器被打开怎么办,所选日期正确,因此用户会再次将其关闭?这是该问题的最佳解决方案。当基础数据源填充空值时,不会触发此处理程序,因为从技术上讲,dtp值不会更改。因此,这对该场景没有好处。
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;
}
}