winforms 如何让DateTimePicker显示空字符串?

gdx19jrr  于 2023-10-23  发布在  其他
关注(0)|答案(8)|浏览(212)

我希望能够显示默认值为nothing的DateTimePicker,即没有约会。
例如,我有一个任务的开始日期dtTaskStart和结束日期dtTaskEnd,但结束日期是未知的,并且最初没有填充。
我为这两个控件指定了自定义格式yyyy-MM-dd
在运行时将值设置为null或空字符串会导致错误,那么我如何才能做到这一点呢?
我已经考虑过使用复选框来控制该字段的启用,但仍然存在显示初始值的问题。

  • 编辑:*

可以说是问题DateTimePicker Null Value (.NET)的重复,但是我为我的问题找到的解决方案不是那个问题的解决方案,所以我认为它应该留在这里让其他人找到。

dvtswwa3

dvtswwa31#

只需按如下方式设置属性:
当用户按下“清除键”或“删除键”时,

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

DateTimePicker1_ValueChanged事件上执行

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

u3r8eeie2#

使用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
lawou6xi

lawou6xi3#

这对我来说是C#

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

Nice one!

sulc1iza

sulc1iza4#

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

sd2nnvve5#

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

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

thigvfpy

thigvfpy6#

基本概念是相同的告诉别人。但是当你有多个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;
            }
        }

未选中时

选中时

fnvucqvd

fnvucqvd7#

如果你想显示空的datetimepicker,并且在用户没有选择日期时得到null,那么在代码中进行以下更改,否则保存日期。
1.将datetimepickerFORMAT属性设置为自定义。
1.将CUSTOM FORMAT属性设置为空字符串““。
1.将其TAG默认设置为0。
1.注册事件为datetimepicker VALUECHANGED。

现在开始真实的工作

如果用户将与datetimepicker交互,则将调用其VALUECHANGED事件,并将其TAG属性设置为1。

最终步骤

现在保存时,检查其TAG是否为零,然后保存NULL日期,否则如果TAG为1,则选择并保存日期时间选择器值。
它就像一个魅力。
现在,如果您希望通过用户交互将其值更改回空,则添加复选框并使用此复选框显示文本“Clear”。如果用户想清除日期,只需再次将其CUSTOM FORMAT属性设置为空字符串““,并将其TAG设置回0。就是这样..

gev0vcfq

gev0vcfq8#

最好使用文本框来调用/显示日期,并在保存时使用DateTimePicker。根据要求,使可见属性为true或false。
例如:在表单加载过程中,在文本框中加载日期并使DTPIcker不可见,反之亦然

相关问题