Как настроить средство выбора даты и времени в формах win так, чтобы оно не имело значения по умолчанию?

Я реализую функцию поиска в WinForms и ищу по диапазону дат. Таким образом, на форме есть средства выбора даты dateForm и dateTo. По умолчанию их значения - это дата и время сейчас (), и если пользователь вообще не трогает средства выбора даты и времени, он не получит никаких результатов. Поскольку поиск будет выполняться между now() и now(), также, если я поставлю минимальное и максимальное значения по умолчанию, это решит первую проблему, но будет другая проблема, если пользователь захочет выполнить поиск по диапазону дат, ему нужно будет щелкнуть многие время от 1700 по умолчанию (что-то) до настоящего времени ()

Любые предложения по решению этой проблемы?

Большое спасибо.


person eomeroff    schedule 28.01.2010    source источник
comment
возможный дубликат DateTimePicker Null Value (.NET)   -  person bluish    schedule 13.11.2013


Ответы (5)


У вас не может быть бесполезного средства выбора даты с готовым элементом управления. Почему? Он поддерживается DateTime, который не может быть нулевым.

Вы можете отключить его с помощью другого элемента управления или оставить его отключенным до тех пор, пока пользователь не щелкнет (плохой UX для любителей клавиатуры, таких как я), или найти или создать (!) тот, который использует Nullable<DateTime>.

Редактировать:

В ответ на ваш комментарий, да, вы можете это сделать; на самом деле, я сделал это.

  • используйте поля или частные свойства для хранения дат «от» и «до» вместо того, чтобы читать их из dtp, и установите для них значения по умолчанию min и max
  • используйте логический флаг, чтобы указать, когда вы манипулируете значением dtp в коде, и в событии ValueChanged dtp установите значение флага в false
  • в событии загрузки формы установите флаг в значение true и значение dtp на сегодняшнюю дату
  • также в событии ValueChanged установите в полях from и to значения dtps (вы должны установить оба, когда любой из dtp изменится, потому что пользователь увидит другой как установленный сегодня, но значение поиска все равно будет мин. или макс).

Проблема в том, что после того, как пользователь изменил выбор даты, он не может легко вернуться ко всем датам. Кроме того, пользователь не может выбрать только сегодня, не изменив сначала одну из дат, а затем изменив ее обратно.

Я думаю, что лучшим решением для вас является установка флажка для поиска по диапазону дат, который либо включает два dtps, которые в противном случае отключены, либо отображает dtps, которые в противном случае скрыты. Затем вы выполняете поиск от минимальной до максимальной, если не установлен флажок, а когда флажок установлен, вы используете две даты dtp независимо от того, какие они есть. Не забудьте устранить неисправность to и from, что можно сделать несколькими способами.

person Jay    schedule 28.01.2010
comment
есть ли способ проверить, изменилось ли значение выбора даты? А если нет, установите dateFrom на минимальное время даты и dateTo на максимальное время даты. В противном случае введите реальные значения из datepicker. - person eomeroff; 30.01.2010

Взгляните на здесь средство выбора даты и времени с нулевым значением в CodeProject. несколько здесь.

person t0mm13b    schedule 28.01.2010
comment
спасибо, я посмотрю ссылки, как только у меня будет время, если я не отвечу, это только потому, что я занят. Извини - person eomeroff; 30.01.2010

Установите флажок рядом с каждым средством выбора даты и времени и используйте флажок, чтобы включить/отключить средство выбора даты и времени.

Поэтому, если средство выбора даты и времени отключено, вы знаете, что пользователь не хочет указывать дату и время.

person Weiming    schedule 28.01.2010
comment
Я думаю, что не могу использовать это из-за требований к дизайну пользовательского интерфейса. - person eomeroff; 30.01.2010

Вы можете установить для свойства DateDateTimePicker.Format значение Custom.

Затем установите для свойства DateDateTimePicker.CustomFormat текст по умолчанию (например, "N/A" или пробел " ")

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

пример

Надеюсь это поможет!

person user3348987    schedule 22.08.2014

DateTimePicker имеет свойство ShowCheckBox, которое «определяет, отображается ли флажок в элементе управления. Если флажок не установлен, значение не выбрано».

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

public DateTime? EndDate
{
    get
    {
        DateTime? returnValue = null;
        if (endDateDateTimePicker.Checked) 
        { 
            returnValue = endDateDateTimePicker.Value; 
        }
        return returnValue;
    }
    set
    {
        if (value.HasValue)
        {
            endDateDateTimePicker.Checked = true;
            endDateDateTimePicker.Value = value.Value;
        }
        else
        {
            endDateDateTimePicker.Checked = false;
        }
    }
}
person rockariotphobia    schedule 24.02.2013