DateTimePicker никогда не обновляется!

у меня есть несколько DateTimePickers в форме, которая никогда не обновляется.
Я пытался Value и Text, Invalidate() а то Update() и Refresh()...

кажется, ничто не меняет их значения с текущей даты!
Независимо от того, что я установил, текущие даты (относительно)сегодняшние!

это ошибка .NET 3.5 или что?
(Нет, я не могу использовать .NET 4 в этом проекте.)


если вы действительно хотите какой-то код, то вот он: dateTimePicker1.Value = user.BirthDay;. Кроме того, если я напишу MessageBox.Show(user.BirthDay.ToString()); Я получаю хорошую коробку, сообщающую день рождения пользователя (мой день рождения, на моей машине). (Таким образом, в переменной есть значение...)


должен ли я также упомянуть, что они предназначены только для дат, а не раз?


хорошо, я вижу, что мне нужно написать больше:

прежде всего, метод, в котором элемент управления обновляется, подписан на Form.Load событие. Следовательно, он вызывается/запускается/вызывается, когда форма и элементы управления видны и "бегущие".

во-вторых, посмотрите на эти фрагменты кода и их результат:

MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format)
dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995
MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date!

это нехорошо... Результат-сегодняшняя дата. (Сегодня я имею в виду день, когда был запущен код.)

dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ...

плохой контроль! 1900 не равна 1753!

dateTimePicker1.MaxDate = DateTime.Today;
// In reality, I need it to today's date
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998

искривление времени? О_О

в любом случае, весь код выглядит так:

public void Form_Load(object sender, EventArgs e)
{
    this.user = User.Load(path);
    // this.user is a field.
    // path is a static field which holds the absolute path of the file in which is serialized that data of the user.

    MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format)
    dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995
    MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date!

    dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ...

    dateTimePicker1.MaxDate = DateTime.Today;
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998
}

Итак, любое решение? xC

2 ответов


один небольшой намек с этой проблемой: моя проблема заключалась в том, что у меня был DateTimePicker установлен на checked=false и (по ошибке) ShowCheckbox=false; С этой настройкой я мог бы установить DTPicker любое значение, которое я хотел,но он не будет удаляться.


стандартная диагностика для формы, не обновляющей ее внешний вид, но вы видите, что обновление свойства с отладчиком просто отлично использует неправильный экземпляр формы. Как это, например:

var frm = new Form1();  // Wrong!!
frm.UpdateBirthDay(user.BirthDay);

диагностируйте это, изменив свой код следующим образом:

dateTimePicker1.Value = user.BirthDay;
this.Show();   // <=== add this