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