DateTimePicker Значение по умолчанию:Как этого избежать?

StackOverflow https://stackoverflow.com/questions/1400525

  •  05-07-2019
  •  | 
  •  

Вопрос

Факты:

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

Почему это происходит?Как мне этого избежать?

Это было полезно?

Решение 3

Мой уродливый обходной путь этой проблемы состоит в том, чтобы активировать вкладку, на которой находится 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);

Другие советы

Я узнал, в чем тут проблема.

А 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);

Кажется, это не имеет ничего общего с программным добавлением средства выбора.

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

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

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

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

Если у вас не получается заставить его работать, вы всегда можете попробовать использовать другой сборщик.А Виджет календаря Any+Time(TM) Datepicker/Timepicker AJAX извлекает свое значение из связанного поля, поэтому, если вы инициализируете поле значением или измените поле, чтобы оно имело значение (например, при загрузке), то это то, что вы получите, когда отобразится средство выбора.А если у вас возникнут с этим проблемы, просто отправьте сообщение через страницу контактов, и оно будет решено как можно скорее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top