Позиция курсора/выделения в DateTimePicker
-
20-09-2019 - |
Вопрос
Я пытаюсь определить выбранную в данный момент часть редактора даты (или времени).Мне нужно предоставить специальные действия при использовании навигационных клавиш на КПК.В частности, я хочу, чтобы фокус перешел на следующий элемент управления при нажатии кнопки «Вправо» и выборе последней части даты (например, года).Поведение по умолчанию — циклическое переключение частей даты.
Я просмотрел параметры Win32 API для DateTimePicker (связь), но, похоже, это не поддерживает.
Какие-либо предложения?
Решение
Средство выбора даты .Net cf — это PITA.
Пробовали ли вы перехватить и переопределить Событие KeyUp для кнопки «Вправо», когда фокус находится на средстве выбора даты?Вы можете подсчитать, сколько раз была нажата клавиша «Вправо», и таким образом можно подделать настройку положения:Установите для переменной-счетчика значение 1, когда средство выбора даты получает фокус, и увеличьте его на единицу, когда вы перехватываете клавишу «Вправо».Проверьте, является ли это клавишей «Вправо», и если переменная счетчика кратна трем, установите e.Handled = true, чтобы предотвратить выполнение поведения по умолчанию.Конечно, ваша логика переопределения будет заключаться в том, чтобы установить фокус на следующий элемент управления.
Редактировать:Не забудьте уменьшить значение счетчика var при нажатии клавиши «Влево»!
Пользовательский вариант:Я думаю, что лучше всего создать свой собственный элемент управления датой.я сделал это.Это не так уж сложно.Это вопрос выравнивания трех текстовых полей в элементе управления и выполнения базовой проверки.Вы также по-прежнему можете использовать календарную часть средства выбора, если вам это необходимо.
Также стоит покопаться в OpenNetCF.В нем масса классов, хотя я не уверен, будет ли альтернатива средству выбора даты.Тем не менее, если вы серьезно занимаетесь разработкой CF, на это стоит посмотреть.