Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Как правильно обработать onValidate?   Найти похожие ветки 

 
Fom   (2004-02-04 10:30) [0]

Мастаки, помогите...
Делаю проверку на вводимое значение для числового поля в событии
OnValidate:

...
begin
if GoodValue(Sender.AsFloat) <> 0 then
begin
ShowMessage("Bad value!");
Sender.Value := Sender.OldValue;
fMain.dbeLT.SetFocus;
end;
end;
...


Но такой код не верно работает, почему-то Sender.OldValue - это новое а не старое, но даже если и было оно новвым, то такая обработка зацикливается... Как правильно сделать?


 
Fom   (2004-02-04 10:46) [1]

Ну что ж, что-то у меня получилось :)


...
begin
if GoodValue(Sender.AsFloat) <> 0 then
raise Exception.Create("Bad value!");
end;
...



Но в поле ввода остается новое значение, как вернуть старое?


 
Sandman25 ©   (2004-02-04 10:59) [2]

Dataset.Cancel


 
Fom   (2004-02-04 11:03) [3]

А нельзя остаться в режиме редактирования, но с со старым значением?


 
Sandman25 ©   (2004-02-04 11:04) [4]

Можно.
1. После Cancel сразу вызвать Edit.
2. В BeforeEdit запоминаете старые значения всех полей.
В OnValidate восстанавливаете только то, что нужно восстановить.


 
Mike Kouzmine ©   (2004-02-04 11:05) [5]

BtforeEdit - запоминаешь, надо меняешь. Еще есть методы.


 
Fom   (2004-02-04 11:13) [6]

ну и гемор, млин...


 
Sandman25 ©   (2004-02-04 11:16) [7]

[6] Fom (04.02.04 11:13)

Напишите своего наследника TxxxField, у которого все это будет реализовано "внутри". И гемора не будет :)
Кстати, не забудьте о параметрах события OnValidate - может, получится объединить несколько обработчиков.


 
Fom   (2004-02-04 11:25) [8]

Ок. Спасибо за советы...
Еще тогда один трабл, как сделать, чтобы нельзя было вводить данные в поле, если не введены данные, в какое-то другое поле?


 
Sandman25 ©   (2004-02-04 11:28) [9]

Для этого лучше вводить данные в отдельной форме и при попытке войти в Edit (OnEnter) отправлять на другой Edit (SetFocus).
Для грида можно попытаться не пускать в колонку (OnColEnter)


 
Fom   (2004-02-04 11:33) [10]

Так и сделал, но при попытке перейти к какому-то третьему полю ввода или отменить(Cancel). все время выскакивает сообщение обработки OnEnter поля, которое зависит от ввода в другом поле...


 
Sandman25 ©   (2004-02-04 11:38) [11]

[10] Fom (04.02.04 11:33)

Это уже проблемы программной логики и взаимозависимостей. Либо решайте ее, либо вообще откажитесь от идеи проверки непосредственно при вводе и проверяйте все в BeforePost


 
Deniz ©   (2004-02-04 14:12) [12]

Query1.CachedUpdates = True

procedure TForm1.Query1SIZESetText(Sender: TField; const Text: String);
var i : integer;
begin
i:=StrToInt(Text);
if i > 100 then
Sender.AsInteger:=Sender.OldValue;
else Sender.AsInteger:=i;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
4-94248
TankMan
2003-12-22 19:25
2004.02.29
Как определить Класс определенного окна?


1-93925
Sour
2004-02-15 12:49
2004.02.29
Как определить размер (высоту формы) без меню?


1-93984
atmospheric
2004-02-18 14:46
2004.02.29
RichEdit форматирование текста ?!


3-93790
Zilog
2004-02-03 17:32
2004.02.29
Как во время выполнения проги создать в БДЕ таблицу с ЗАДАННЫМ


1-93866
Bannikov
2004-02-16 11:52
2004.02.29
DefineProperties ?