代码之家  ›  专栏  ›  技术社区  ›  brasskazoo

如何使DateTimePicker显示空字符串?

  •  58
  • brasskazoo  · 技术社区  · 17 年前

    我想能展示一个 DateTimePicker 默认值为Nothing,即没有日期。

    例如,我有一个开始日期 dtTaskStart 结束日期 dtTaskEnd 对于任务,但结束日期未知,并且最初不填充。

    我已指定自定义格式 yyyy-MM-dd 对于两个控件。

    将值设置为 null 或者运行时的空字符串会导致错误,那么我如何才能完成这一点呢?

    我已经考虑使用复选框来控制此字段的启用,但仍然存在显示初始值的问题。

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

    6 回复  |  直到 17 年前
        1
  •  44
  •   KyleMit Steven Vachon    10 年前

    只需如下设置属性:

    当用户按“清除按钮”或“删除键”时

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

    DateTimePicker1_ValueChanged 事件做

    dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"
    
        2
  •  27
  •   KyleMit Steven Vachon    10 年前

    通过使用 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
    
        3
  •  20
  •   davmos    12 年前

    这对我来说很有用。#

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

    好一个家伙!

        4
  •  5
  •   mbomb007    10 年前

    如果任何人在窗体加载事件期间将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
    
        5
  •  4
  •   CA Martin    10 年前

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

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

        6
  •  2
  •   Rijul Sudhir    9 年前

    基本概念和别人说的一样。但是当您有多个日期时间选择器时,这种方法更容易实现。

    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;
                }
            }
    

    未检查时 enter image description here

    当检查时 enter image description here

    推荐文章