DateTimePicker никогда не обновляется! - PullRequest
12 голосов
/ 13 ноября 2010

У меня есть DateTimePicker в форме, которые никогда не обновляются.
Я пробовал 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
}

Итак, какое-нибудь решение? хс

Ответы [ 3 ]

19 голосов
/ 29 января 2011

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

1 голос
/ 13 ноября 2010

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

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

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

dateTimePicker1.Value = user.BirthDay;
this.Show();   // <=== add this
0 голосов
/ 13 апреля 2019

Моя работа по обновлению упрямого DateTimePicker для отображения его текущего значения, а также по обновлению связанных с ним DataBindings заключается в переключении его свойства .Enabled.

myDateTimePicker.Enabled = !myDateTimePicker.Enabled;
myDateTimePicker.Enabled = !myDateTimePicker.Enabled;
...