Как заставить DateTimePicker отображать пустую строку?
Я хотел бы иметь возможность отображать DateTimePicker
, который имеет значение по умолчанию ничто, т.е. нет даты.
Например, у меня есть дата начала dtTaskStart
и дата окончания dtTaskEnd
для задачи, но дата окончания неизвестна и не заселена изначально.
Я указал пользовательский формат yyyy-MM-dd
для обоих элементов управления.
Установка значения null
или пустая строка во время выполнения вызывает ошибку, так как я могу это сделать?
Я рассмотрел использование флажка для управления включением этого поля, но все еще остается проблема отображения начального значения.
Edit:
Возможно, дубликат вопроса DateTimePicker Null Value (.NET), но решение, которое я нашел для моей проблемы, не является решением для этого вопроса, поэтому я думаю, что он должен оставаться здесь для других, чтобы найти..
Ответы
Ответ 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;
}
}
Если не установлен
![введите описание изображения здесь]()
При проверке
![введите описание изображения здесь]()