Перейти к следующей части даты при вводе данных в DateTimePicker
У меня есть пользовательский запрос, который я пытаюсь удовлетворить. Самый простой способ объяснить это использовать иллюстрацию с изображением:
По сути, пользователь вводит тонну дат. Вместо того, чтобы вводить
MM [Обратная косая черта (или стрелка вправо)]
DD [Обратная косая черта]
ГГГГ [обратная косая черта] и т. Д...
Они хотели бы ввести значение и перейти к следующему значению даты. Хотя это не так уж и много, я могу себе представить, что это добавляет много дополнительных нажатий клавиш и убирает конечного пользователя с цифровой клавиатуры. В настоящее время я использую Telerik Winform RadDateTimePicker с пользовательским форматом:
MM/dd/yyyy hh:mm tt
но не будет против перехода на Winforms DateTimePicker.
Кто-нибудь может предложить элегантное решение для этого? Единственное, о чем я сейчас могу думать, это ловить нажатия клавиш, когда элемент управления находится в фокусе, но я чувствую, что это может быть грязно.
Спасибо
3 ответа
RadMaskedEditBox (и, соответственно, RadDateTimeEditor, который внутренне использует RadMaskedEditBox), имеет встроенную функциональность для выбора следующей части, однако, похоже, что она не работает корректно с этой маской, поэтому я сообщил об этом как о проблеме. Вот ссылка на него: ссылка на вопрос. Вы можете подписаться на уведомления об изменении статуса, чтобы получать уведомления, как только это будет сделано.
То, на что вы можете обратить внимание, это введенный недавно разбор даты и времени в свободной форме. Это позволяет вам ввести "10162014", который будет проанализирован как "10\16\2014". Больше информации здесь нет дат разбора: Даты разбора
И последнее, что нужно сделать, это поработать с KeyDown и вручную переместить выделение. У провайдера есть API для этого. Вот как это сделать:
(this.radDateTimePicker1.DateTimePickerElement.TextBoxElement.Provider as MaskDateTimeProvider).SelectNextEditableItem();
Я надеюсь, что кое-что из этого работает для вас.
Это не является ответом по ссылке, но я должен обратиться к документации Telerik, чтобы OP мог настроить элемент управления в соответствии со своими потребностями.
Насколько я понимаю, ваш клиент должен вводить дату и время в определенной культуре, избегая ввода разделителей. Вы должны использовать maskedEditBox, который уже имеет маску для ваших нужд MM/dd/ гггг чч: мм tt В частности, вы должны установить шаблон "s", который соответствует "Сортируемому шаблону даты и времени (основанному на ISO 8601) с использованием местного времени"
Посмотрите документацию Telerik здесь, чтобы настроить контроль по мере необходимости и соответствующий валидатор. Это должно решить вашу проблему.
Вот как это выглядит, когда пусто:
и это си шоу, которое появляется при заполнении:
Используя соответствующее событие (я использовал radMaskedEditBox1_Leave), вы все равно можете использовать также dateTimePicker, принимающий входные данные из radMasketTextBox:
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "dd/MM/yyyy HH:mm ss";
dateTimePicker1.Text = radMaskedEditBox1.Text;
Please check below URL
URL скрипты для маски даты и времени:
1]. http://jsfiddle.net/jensbits/3yUes/light/2]. http://jsfiddle.net/LkpPJ/5/