Интересное поведение у контрола DateTimePicker. Предположим, нужно показать форму с возможностью редактирования даты какого-нибудь объекта, скажем файла. Интуитивный подход таков:
DialogDateEdit dialog = new DialogDateEdit(); // состояние флажка будет показывать // надо ли применять значение пикера dialog.DateTimePicker1.ShowCheckBox = true; dialog.DateTimePicker1.Value = File.GetCreationTime(file_name); dialog.DateTimePicker1.Checked = false; // -> и Value чудесным образом становится датой по умолчанию if ((dialog.ShowDialog() == DialogResult.OK) && dialog.DateTimePicker1.Checked) File.SetCreationTime(file_name, dialog.DateTimePicker1.Value);И он не работает: пикер всегда будет показывать текущую дату-время. Оказалось, что если до показа диалога установить Value при сброшенном Checked, Value не устанавливается; а если установить Value, а потом сбросить Checked, Value сбрасывается на DateTime.Now. При этом, когда диалог уже показан на экране, все эти свойства работают как и ожидается от них. ShowDialog() блокирует до закрытия диалога, поэтому Checked придется сбрасывать на событии Shown, примерно так:
DialogDateEdit dialog = new DialogDateEdit(); dialog.DateTimePicker1.ShowCheckBox = true; dialog.DateTimePicker1.Value = File.GetCreationTime(file_name); dialog.Shown += (s, o) => (s as DialogDateEdit).DateTimePicker1.Checked = false; if ((dialog.ShowDialog() == DialogResult.OK) && dialog.DateTimePicker1.Checked) File.SetCreationTime(file_name, dialog.DateTimePicker1.Value);