2016-07-29 4 views
0

У меня есть элемент управления TextEdit, что я хочу вести себя определенным образом:DevExpress RegEx маска с различными DisplayFormat не работает

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

Когда элемент управления НЕ имеет фокус ввода, я хочу, чтобы он отображал введенный номер, но с «, 00» в конце.

Так что, в основном, когда я что-то ввожу, я вижу только, что я вхожу, например. «17», но когда Control теряет фокус, я хочу, чтобы он показывал «17,00». Так что мне разрешено вводить целые положительные числа, но Controll всегда будет добавлять «, 00» после этого.


Мое понимание состоит в том, что существуют в основном два разных режима: DisplayMode и EditMode.

EditMode = Элемент управления имеет фокус.

DisplayMode = Элемент управления не имеет фокуса.

В EditMode я могу вводить вещи в свой элемент управления Textedit. То, что я могу и не могу войти, определяется маской.

Когда я теряю фокус, он переходит в DisplayMode. Здесь я не могу набрать ничего в TextEdit, но теперь отображаемый текст больше не определяется маской, а свойством «Свойства.DisplayFormat». Поэтому для достижения моей цели я попытался установить DisplayFormat.FormatString на «0.00», чтобы он всегда показывал два десятичных знака «x, 00».

Как-то это не работает должным образом. DisplayFormat, похоже, ничего не делает и даже в DisplayMode, TextEdit по-прежнему показывает только целое число без десятичных знаков.

Those are the entered properties

Я понимаю, что я мог бы использовать событие, чтобы обойти эту проблему, но я думаю, вот что DisplayFormat, EditFormat и маска для, и я действительно не хочу, чтобы обрабатывать несколько событий, за то, что мало.

ответ

1

Приобретение базы знаний DevExpress topicDisplayFormat не работает в несвязаном режиме.

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

Если вы используете XtraEditors 3 или выше, вы можете установить Mask.MaskType свойство редактора, чтобы Числовой. В этом случае редактор принудительно возвращает , чтобы обрабатывать значение редактирования как число и, следовательно, он может отформатировать его.

Если вы не хотите использовать Числовой (или DateTime) маску, пожалуйста, используйте событие ParseEditValue, чтобы преобразовать строку в число.

Я могу предложить вам использовать Numeric маску с n0 в маске ввода:
Numeric mask

+0

Причина, по которой я не могу использовать MaskType Numeric, заключается в том, что она позволяет отрицательные числа и ноль. Есть ли способ запретить пользователю использовать отрицательные числа? – Smogen

+1

@ Смоген Да. Вы можете использовать [Сепаратор раздела] (https://msdn.microsoft.com/en-us/library/0c899ak8 (v = vs.110) .aspx # SectionSeparator) в вашей маске. Оставьте отрицательный раздел пустым и используйте '#' в качестве разделителя цифр. Итак, вот ваша маска: '###, ###, ###, ###, ###, ###;'. – nempoBu4

+0

Это сработало! Большое спасибо! – Smogen

0

Для достижения выше достаточно прост:

Чтобы разрешить положительные целые числа, вам необходимо установить MaskType до Numeric и используйте EditMask ##########;. Количество # представляет собой возможное количество didgets, поэтому десять раз # означает, что вы можете использовать десятизначный номер. (См ответ nempoBu4 в)

Чтобы показать дополнительную ,00, когда элемент управления теряет фокус, вам нужно просто установить DisplayFormat как FormatType = Numeric и FormatString = n2.

Смежные вопросы