Контроль вводимых в поля набора данных в Delphi возложен на объекты полей, а не на компоненты отображения данных. Именно в рамках этого вопроса мы рассмотрим работу методов-обработчиков событий базового класса TField.
Перед сохранением значения поля в БД всегда вызывается метод-обработчик onvalidate, при этом автоматически проводится проверка на выполнение задаваемых ограничений и ограничений типа данных. Кроме этого, здесь можно предусмотреть свою дополнительную обработку:
procedure TForml.TablelSomeFieldValidate(Sender: TFieid);
begin
if (Sender as TFieid).Value < 0 then
begin
ShowMessage('Значение поля не может быть отрицательным');
(Sender as TFieid).Value := Null;
end;
end;
Различают контроль значения в целом и посимвольный контроль. Метод OnValidate проверяет значение поля целиком. Если при проверке обнаружена ошибка, то выдается сообщение и фокус формы устанавливается на соответствующем компоненте отображения данных.
Если метод OnValidate не вызвал исключительной ситуации, то при сохранении значения поля в БД вызывается обработчик события onchange. В принципе, можно предусмотреть операции по контролю данных и в этом методе, но тогда в случае ошибки возникает нежелательная исключительная ситуация, которая может привести к серьезным сбоям в работе приложения.
Проверить текущее значение поля перед его появлением в компоненте отображения данных можно в методе-обработчике OnGetText. Если параметр DisplayText принимает истинное значение, то в параметре Text передается значение свойства DisplayText (значение в строковом формате в таком виде, как оно будет показано в компоненте отображения данных — с символами форматирования). В противном случае в параметре Text передается текущее значение в строковом формате.
Примечание
При использовании метода-обработчика OnGetText на разработчика ложится обязанность самостоятельно предусмотреть передачу значения в компонент отображения данных, в противном случае компонент останется незаполненным.
|
Символ
|
Описание
|
|
!
|
|
|
>
|
Все символы после этого преобразуются в заглавные |
|
<
|
Все символы после этого преобразуются в строчные |
|
<>
|
Все символы после этого остаются в том регистре, как это было задано пользователем |
|
\
|
Символ, следующий за этим, считается алфавитным, а не управляющим |
|
L
|
В позиции этого символа обязательно должен находиться только алфавитный символ |
|
I
|
В позиции этого символа может находиться алфавитный символ |
|
А
|
В позиции этого символа обязательно должен находиться алфавитный символ или цифра |
|
а
|
В позиции этого символа может находиться алфавитный символ или цифра |
C
|
В позиции этого символа обязательно должен находиться знак препинания |
|
с
|
В позиции этого символа может находиться знак препинания |
|
0
|
В позиции этого символа обязательно должна находиться цифра |
|
9
|
В позиции этого символа может находиться цифра |
|
#
|
В позиции этого символа может находиться цифра, плюс или минус |
|
:
|
Символ разделения часов, минут и секунд (зависит от системных установок) |
|
/
|
Символ разделения дней, месяцев, годов (зависит от системных установок) |
|
;
|
Символ разделения частей шаблона |
|
-
|
Символ автоматического ввода в текст пробела |