пятница, 17 июля 2009 г.

Валидаторы в JVCL. Часть 2

Начало в предыдущем посте.

Валидация с помощью JvValidators

У компонента JvValidators реализуем обработчик события OnValidateFailed. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Add(Format('%s',[BaseValidator.ErrorMessage]));
Естественно, вместо RichEdit можно взять любой другой компонент.

Валидация осуществляется с помощью следующего кода:
JvValidators1.Validate;
Валидация с помощью JvValidationSummary
Размещаем на форме компонент TJvValidationSummary и получаем JvValidationSummary1. У компонента JvValidators1 устанавливаем свойство ValidationSummary в значение JvValidationSummary1 и реализуем обработчик события OnChange. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Text :=
TJvValidationSummary(Sender).Summaries.Text;
Валидация осуществляется с помощью следующего кода:
JvValidationSummary1.Summaries.Clear;
JvValidators1.Validate;
Валидация с помощью JvErrorIndicator
Размещаем на форме компонент TJvErrorIndicator и получаем JvErrorIndicator1. У компонента JvValidators1 устанавливаем свойство ErrorIndicator в значение JvErrorIndicator1. Валидацию можно осуществить с помощью следующего кода:
JvErrorIndicator1.BeginUpdate;
try
JvErrorIndicator1.ClearErrors;
JvValidators1.Validate;
finally
JvErrorIndicator1.EndUpdate;
end;
Рядом с элементами управления, не прошедших валидацию, появится предупреждающая иконка:

За ее появление отвечает компонент JvErrorIndicator.

При необходимости сообщение об ошибке можно куда-нибудь вывести, но при большом количестве валидаторов удобно реализовать метод, который облегчит нам работу. Сигнатура метода следующая:
procedure ProviderErrorValidateFailed(Sender: TObject; BaseValidator: TJvBaseValidator; var Continue: Boolean);
Код метода может выглядеть например так:
JvErrorIndicator1.Error[BaseValidator.ControlToValidate]:= BaseValidator.ErrorMessage;
RichEdit1.Lines.Add(Format('%s', [BaseValidator.ErrorMessage]));
Надеюсь, чта это информация кому-нибудь пригодится :)

4 комментария:

  1. Все отлично но с DB компонентами не работает.
    Пример
    Есть TJvDBDateEdit компонент у него есть свойство DATE при подключении этого компонента через Required Field Validator он не показывает это свойство в PropertyToValidate.
    Если пробовать через Custom Validator
    то в обработчике OnValidate параметр ValueToValidate всегда NULL даже если насильно написать в PropertyToValidate = DATE.
    Или что-то не так понял

    ОтветитьУдалить
  2. К сожалению, в настоящее время не работаю с Delphi, поэтому проверить это и что-то посоветовать не могу.

    ОтветитьУдалить
  3. жаль. А так компонент мне понравился очень хорошая вещь для изготовления Wizard
    Сейчас Придется выкручиваться, потом надо будет залезть внутрь

    ОтветитьУдалить