Как настроить дату и время выбора формы выигрыша, чтобы они не имели значения по умолчанию? - PullRequest
4 голосов
/ 28 января 2010

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

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

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

Ответы [ 5 ]

2 голосов
/ 28 января 2010

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

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

Edit:

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

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

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

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

2 голосов
/ 28 января 2010

Посмотрите здесь для обнуляемой даты / времени на CodeProject, на самом деле есть несколько здесь .

1 голос
/ 28 января 2010

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

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

0 голосов
/ 22 августа 2014

Вы можете установить для свойства DateDateTimePicker.format значение custom. Затем в свойстве DateDateTimePicker.customformat вы можете установить текст по умолчанию, например, «N / A» или «sapce» ». После того, как пользователь выбрал определенное значение даты, вы должны установить для свойства формата значение short и т. Д.

http://i.stack.imgur.com/Z1QB5.png

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

0 голосов
/ 24 февраля 2013

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...