amsga Ответов: 1

Как я могу слушать только для элемента управления datetimepicker событие valuechanged от пользовательского ввода


Привет,

Я использую событие DateTimePicker Enter, чтобы установить максимальную дату на вчерашнюю дату, поскольку я не контролирую, если пользователь решит оставить приложение открытым в течение нескольких дней.

Я также использую событие DateTimePicker ValueChanged для настройки моих диалогов на основе этих выбранных дат.

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я настраиваю максимальную дату с помощью события Enter, также вызывается событие ValueChanged, и значение, взятое из DateTimePicker, не является пользовательским значением. Есть ли что-нибудь, что я могу сделать, чтобы только слушать изменения ввода от пользователя?

Что я уже пробовал:

Функция DateTimePicker крупным планом, по-видимому, помогает, Но только в том случае, если пользователь использует календарь для выбора даты, а не вводит ее вручную.

1 Ответов

Рейтинг:
2

CHill60

Я использую логический "флаг" для управления этим.

Частная собственность на бланке например

bool codeUpdate;
Когда мне нужно программно что-то изменить, я сначала устанавливаю логическое значение true, делаю свои изменения, а затем возвращаю его в false, например
codeUpdate = true;
//make my changes
// …
codeUpdate = false;
Затем в каждом из событий управления, которые я хочу нет огонь если я делаю это в коде у меня есть одна строка
if (codeUpdate) return;
Кстати, это очень старая школа!
Более современный подход может заключаться в том, чтобы фактически полностью отцепить событие(ы), пока вы вносите свои программные изменения, например
DatePicker1.ValueChanged -= DatePicker1_ValueChanged);
// make my changes
// …
DatePicker1.ValueChanged += DatePicker1_ValueChanged;
Я предпочитаю первый подход - мне яснее, что происходит, особенно если вы используете переменную с соответствующим именем. Хотя я уверен, что кто-то выдвинет альтернативный аргумент.

Честно говоря, я, вероятно, не стал бы постоянно менять максимальную дату через событие Enter. Я бы просто проверил значение DatePicker против "Вчера" в событии ValueChanged, тогда эта проблема просто исчезнет