вот как я это решил. У меня не могло быть NULLS, поэтому я определил 1 января 1980 года как MYNULLDATE. Я использовал привязку данных к тексту и значению datetimepicker. Я не использовал флажок в datetimepicker. Я не чередовал форматы от коротких до пользовательских. Похоже, что он запускает события с измененным значением, поэтому я просто использовал custom и изменил формат custom. Я использовал Flowpanel и NONBOUND флажок, чтобы сидеть перед datetimepicker.
Образец кода
private void dateTimePicker_ValueChanged(object sender, EventArgs e)
{
if (sender != null && sender.GetType() == typeof(DateTimePicker))
{
if (((DateTimePicker)(sender)).Value == MYNULLDATE)
{
((DateTimePicker)(sender)).CustomFormat = " ";
checkBoxDate.Checked = false;
}
else
{
((DateTimePicker)(sender)).CustomFormat = "M/d/yyyy";
checkBoxDate.Checked = true;
}
}
}
В неограниченном чекбоксе
private void checkBoxDate_Click(object sender, EventArgs e)
{
if (bindingSource != null && bindingSource.Current != null &&
bindingSource.Current.GetType() == typeof(MyRecord))
{
MyRecord a = (MyRecord)bindingSource.Current;
if (checkBoxDate.Checked == false)
{
a.Date = MYNULLDATE;
dateTimePicker.Enabled = false;
}
else
{
if (a.Date == null || a.Date == MYNULLDATE)
{
dateTimePicker.Enabled = true;
a.Date = DateTime.Now;
}
}
bindingSource.ResetBindings(false);
}
}