Подтвердить что ты не робот

Как заставить DateTimePicker отображать пустую строку?

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

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

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

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

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

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

4b9b3361

Ответ 1

Обфускация значения с помощью свойства 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

Ответ 2

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

Когда пользователь нажимает кнопку "Очистить" или "Удалить ключ", сделайте

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

В DateTimePicker1_ValueChanged событие

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

Ответ 3

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

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

Славные ребята!

Ответ 4

В случае, если у кого-то возникла проблема с установкой элемента управления 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

Когда я хочу показать пустое значение даты, я делаю это

            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

Основная концепция такая же, как и другие. Но его проще реализовать таким образом, когда у вас есть несколько 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;
            }
        }

Если не установлен введите описание изображения здесь

При проверке введите описание изображения здесь