2009-10-12 3 views
3

Winforms 2.0. Прикрепите DateTimePicker к форме. Он по умолчанию СЕГОДНЯ. Нажмите стрелку вниз, чтобы отобразить календарь, и нажмите «СЕГОДНЯ». Событие ValueChanged делает FIRE, даже если оно уже установлено сегодня.Событие DateTimePicker ValueChanged срабатывает в первый раз, когда нет изменений

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

Если вышеизложенное невозможно, я хочу, чтобы какое-то событие всегда срабатывало, когда я выбираю дату в календаре (независимо от того, есть изменения или нет изменений).

Звучит очень просто, конечно, у кого-то есть ответ?

ответ

6

Что вы видите, есть побочный эффект того факта, что DateTimePicker хранит значение , составляющее его значение, а также дату.

Итак, когда ваша форма сначала инициализируется, DateTimePicker инициализируется DateTime.Now. Когда вы выбираете «Сегодня» из раскрывающегося календаря, вы меняете значение DateTime.Today.

Если вам не нужен компонент времени и/или вы всегда читаете значение dateTimePicker1.Value.Date, тогда вы можете инициализировать элемент управления в коде с помощью DateTime.Now, и событие ValueChanged будет срабатывать, когда пользователь выбирает «Сегодня» из календаря. В противном случае вы можете подумать о том, чтобы поймать событие CloseUp, которое запускается всякий раз, когда календарный контроль закрыт (независимо от того, изменилось ли значение).

+0

спасибо. Ваше объяснение имеет смысл, я переустанавливал его на DateTime.Today во время экспериментов, это должно было быть DateTime.Now, как вы указали. Полезно знать и о событии CloseUp, но я не использовал его в своем случае, так как я хотел конкретно реагировать на нажатие на дату календаря и нигде в форме. – joedotnot

0

Я не программист формы выигрыша, но посмотрите, есть ли событие Day_Render. Это должно срабатывать каждый день ... по крайней мере, есть один для веб-разработки, но я думаю, что это то же самое. Поэтому найдите событие Render().