.net 如何使DateTimePicker显示空字符串?

.net 如何使DateTimePicker显示空字符串?,.net,winforms,datetimepicker,.net,Winforms,Datetimepicker,我希望能够显示默认值为nothing(无日期)的DateTimePicker 例如,对于任务,我有一个开始日期dtTaskStart和一个结束日期dtTaskEnd,但结束日期未知,并且最初没有填充 我为这两个控件指定了自定义格式yyyy-MM-dd 将值设置为null,或者在运行时设置空字符串会导致错误,那么我如何才能做到这一点 我曾考虑使用复选框来控制此字段的启用,但仍然存在显示初始值的问题 编辑: 可以说是问题的重复,但我为我的问题找到的解决方案不是该问题的解决方案,因此我认为应该留在这里

我希望能够显示默认值为nothing(无日期)的
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;
                }
            }