DateTimePicker никогда не обновляется!
У меня есть 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 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 date
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998
Временная деформация? O_O
В любом случае, весь код выглядит следующим образом:
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 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
}
Итак, любое решение? хс
Ответы
Ответ 1
Один маленький намек на эту проблему: моя проблема заключалась в том, что у меня установлен параметр DateTimePicker для проверки = false и (по ошибке) ShowCheckbox = false;
С помощью этой настройки я мог бы установить DTPicker любое значение, которое я хотел, но он не будет удалять себя.
Ответ 2
Стандартная диагностика для формы, не обновляющей ее внешний вид, но вы видите, что обновление свойства с отладчиком просто отлично использует неправильный экземпляр формы. Например, например:
var frm = new Form1(); // Wrong!!
frm.UpdateBirthDay(user.BirthDay);
Диагностируйте это, изменив свой код следующим образом:
dateTimePicker1.Value = user.BirthDay;
this.Show(); // <=== add this
Ответ 3
Моя работа по обновлению упрямого DateTimePicker для отображения его текущего значения, а также по обновлению связанных с ним DataBindings заключается в переключении его свойства .Enabled.
myDateTimePicker.Enabled = !myDateTimePicker.Enabled;
myDateTimePicker.Enabled = !myDateTimePicker.Enabled;