Как я могу сделать DateTimePicker отображать пустую строку?


Я хотел бы иметь возможность отображать DateTimePicker Это имеет значение по умолчанию ничего, т. е. нет даты.

например, у меня есть дата начала dtTaskStart и дата окончания dtTaskEnd для задачи, но дата окончания не известна и не заполняется изначально.

я указал пользовательский формат yyyy-MM-dd для обоих элементов управления.

значение null, или пустая строка во время выполнения вызывает ошибку, так как я могу это сделать?

у меня есть рассмотрено использование флажка для управления включением этого поля, но все еще существует проблема отображения начального значения..

Edit:
Возможно, дубликат вопроса DateTimePicker Null Value (.NET), но решение, которое я нашел для своей проблемы, не является решением для этого вопроса, поэтому я думаю, что он должен остаться здесь для других, чтобы найти..

6 57

6 ответов:

просто установите свойство следующим образом:

когда пользователь нажимает "clear button "или" delete key " do

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

On DateTimePicker1_ValueChanged событий

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

запутывание значения с помощью 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

это сработало для меня на c#

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

здорово, ребята!

Если у кого-то есть проблема с установкой элемента управления 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;
            }
        }

при снятом флажке enter image description here

при проверке enter image description here