Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

В одном из постов, если не ошибаюсь в блоге у Всеволода Леонова, довелось мне прочесть про забавный кейс. В программе было предусмотренно ограничение длины поля ввода пароля. При том, ограничивалось оно тихо, просто “съедая” лишние символы. Естественно, что после этого с паролями возникла неразбериха. В принципе, вопрос ограничения длины поля ввода сам по себе является философским, а возможно даже теологическим, но просто взять и “откусить хвост” вводимому тексту, на мой взгляд – не совсем правильно. Однако, в большинстве случаев, если задать свойство MaxLength для контрола, отвечающего за ввод текста, именно так и произойдет.

Компонент TcxTextEdit и другие компоненты из набора DevExpress  могут красиво решать данную проблему благодаря событию OnValidate.

Код, который я использую выглядит примерно так:

procedure TfrmEditBenefit.txtBenefitNamePropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
 if Length(txtBenefitName.Text)>125 then
 begin
   ErrorText:= 'Benefit name value is too long.';
   Error:= True;
 end;
end;

Для наглядности можно показать значок ошибки рядом с полем ввода.

 

txtBenefitName.Properties.ValidationOptions:= [evoRaiseException, evoShowErrorIcon];

Выглядеть это будет примерно так:

TextValueIsTooLong

Ошибка генерируется если текст длиннее допустимого значения при попытке передать фокус другому контролу. При этом пользователь зразу видит что и где не так. По-моему очень удобно и наглядно.

Другие статьи серии:

DevExpress. TIPS & TRICKS #0
DevExpress. TIPS & TRICKS #1
DevExpress. TIPS & TRICKS #2
DevExpress. TIPS & TRICKS #3
DevExpress. TIPS & TRICKS #4
DevExpress. TIPS & TRICKS #5
DevExpress. TIPS & TRICKS #5.5
DevExpress. TIPS & TRICKS #6


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

4 комментария: DevExpress. TIPS & TRICKS #7

  • Можно было бы добавить, что в настройках контролов от DevExpress есть возможность изменить реакцию компонента на такую ошибку — вывести сообщение, показать значок рядом с полем или ничего не делать. Можно даже разрешить менять фокус, оставив лишь показ одного значка.

    • Ну, в принципе, это все из кода видно. Я привел именно такой пример, потому, что именно такое поведение контрола мне больше всего нравится.

  • Не понял, где это MaxLength “откусывает хвост” ? По моему он просто не дает ввести больше символом чем надо. ИМНО дешево и сердито – в большинстве случаев другого и не надо.

    • Речь идет о случае, когда некоторое значение вставляется из буфера обмена. Тогда пользователь может тупо не заметить “обрезание”.

Ответить на Stalker Отмена ответа

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика