DateTimePicker Значение по умолчанию: как этого избежать? - PullRequest
7 голосов
/ 09 сентября 2009

Факты:

  • У меня есть TabControl с 2 вкладками, каждая вкладка имеет 2 DateTimePicker.
  • В событии Load я устанавливаю значение всех DTP.
  • Все DTP имеют ShowCheckBoxes, установленный на true, и Checked установлен на false.
  • Когда я запускаю программу, DTP на первой вкладке в порядке, но когда я проверяю DTP на второй вкладке, они показывают текущее время, а не время, которое я установил для события загрузки.

Почему это случилось? Как я могу избежать этого?

Ответы [ 6 ]

4 голосов
/ 18 ноября 2009

Я выяснил, в чем здесь проблема.

Свойство Value устанавливает новое значение только в том случае, если виден элемент управления DateTimePicker. В противном случае команда игнорируется.

Контрольный пример:

Не работает:

 this.picker = new DateTimePicker
        {
            Checked = false,
            Font = new System.Drawing.Font("Verdana", 9.75F),
            Format = System.Windows.Forms.DateTimePickerFormat.Time,
            Location = new System.Drawing.Point(5, 5),
            Name = "picker",
            ShowUpDown = true,
            Size = new System.Drawing.Size(120, 23),
            Visible = false
        };
        this.Controls.Add(this.picker);
        this.picker.Value = this.picker.Value.Date.AddHours(1);
        this.picker.Visible = true;

Работает:

 this.picker = new DateTimePicker
        {
            Checked = false,
            Font = new System.Drawing.Font("Verdana", 9.75F),
            Format = System.Windows.Forms.DateTimePickerFormat.Time,
            Location = new System.Drawing.Point(5, 5),
            Name = "picker",
            ShowUpDown = true,
            Size = new System.Drawing.Size(120, 23),
            Visible = false
        };
        this.Controls.Add(this.picker);
        this.picker.Visible = true;
        this.picker.Value = this.picker.Value.Date.AddHours(1);

Кажется, это не имеет никакого отношения к программному добавлению средства выбора.

3 голосов
/ 19 ноября 2014

Это связано со свойством Checked объекта datetimepicker. Обычно это установлено в false. По крайней мере, это была проблема для меня.

После установки значения datetimepicker.check в значение true оно получило значение из настроек.

1 голос
/ 11 декабря 2009

Мой уродливый способ обойти эту проблему состоит в том, чтобы активировать вкладку, в которой находятся DTP до изменения его значений, примерно так:

DateTime dat1 = DateTime.Today;
DateTime dat2 = dat1.AddDays(1).AddSeconds(-1);

dtpCreatedStart.Value = dat1;
dtpCreatedEnd.Value = dat2;
tbc.SelectTab(1);
dtpModifiedStart.Value = dat1;
dtpModifiedEnd.Value = dat2;
tbc.SelectTab(0);
0 голосов
/ 13 ноября 2009

Я только что столкнулся с той же проблемой, используя два DateTimePickers. Мне удалось заставить их обоих показывать правильное значение, динамически генерируя их и добавляя их в форму.

0 голосов
/ 24 октября 2009

DateTimePicker имеет некоторые проблемы с сохранением и получением его значения. У меня были проблемы при привязке значения к необнуляемому DateTime - время от времени я получал NullReferenceExeptions. Понятия не имею почему или когда. Иногда это просто случалось, и приложение зависало.

...