![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка на заполненость нескольких эдитов [D7, Win95/98, WinME, NT4, Win2k, WinXP]
CRACKISH © (2004-08-13 08:52:00)Люди вот у меня есть дапустим 3 Editа! Мне надо их проверить на пустую строку или ноль!
Я делаю так:
if ((Edit1.text:='0') or (Edit1.text:='')) or ((Edit2.text:='0') or (Edit2.text:='')) or ((Edit3.text:='0') or (Edit3.text:='')) then ...
Но реагирует только на первый edit! Помогите! Спасибо!
Юрий Зотов (2004-08-15 15:14:00) [1]> CRACKISH (13.08.04 08:52)
Можете оставить все как есть, только перед Вашим оператором if вставьте вот такую штучку:
{$B+}
а после него вот такую:
{$B-}
Потом сделайте Build (не Compile), и все заработает.
GrayFace (2004-08-15 13:20:00) [2]Ega23 © (13.08.04 12:58) [9]
> Хреновый компонент-то...
Да.
Ega23 (2004-08-13 12:58:00) [3]Не парься с Edit! Используй SpinEdit!
Хреновый компонент-то...
По сабжу:
Если все Edit'ы на форме надо проверять на такое условие, то всё просто:
for i:=0 to ControlCount-1 do
if (Controls[i] is TEdit) then
if (TEdit(Controls[i]).Text='') or
(TEdit(Controls[i]).Text='0') then ....
Если не все, то в этот цикл добавиться строчка
if (TEdit(Controls[i]).Name= ....
Алхимик (2004-08-13 12:40:00) [4]
> [7] IceBeerg © (13.08.04 12:21)
У тебя на ноль ("0") не проверяется. А автор хочет.
IceBeerg (2004-08-13 12:21:00) [5]А еще можно If Length(Edit1.Text)+Length(Edit2.Text)+Length(EditХ.Text)=0 Then ...
GrayFace (2004-08-13 10:31:00) [6]> уникальные имена
т.е. особые: EditCount и т.д.
KSergey (2004-08-13 10:31:00) [7]> [1] TUser © (13.08.04 08:55)
> И лучше, наверное, так
> S:=(FindComponent
Чем же лучше-то? Как-бы короче, но выполняться - дольше. А если еще в Edit10 надо будет проверить? Вводить доп. проверки на значение i? В итоге их кол-во (проверок) превысит сложность изначального кода
Так чем лучше-то?
Тогда уж (типа универсально в плане расширяемости)
function TestEdit(arrEd: array of TEdit): Boolean;
var
i: Integer;
begin
Result := FALSE; // а то подозреваю компилятор скажет "мжет быть не инициализирована"
for i := Low(arrEd) to High(arrEd) do
begin
Result := (arrEd.Text = '0') or (arrEd.Text = '');
if NOT Result then Break;
end;
end;
использование:
if TestEdit([Edit1, Edit2, Edit3]) then ...
В коде возможны синтаксические ошибки (и не только).
Идею проверки вроде правильно слизал у [1] TUser © (13.08.04 08:55), т.к. в авторском посте не понял что именно надо.
GrayFace (2004-08-13 10:30:00) [8]CRACKISH (13.08.04 8:52)
Не парься с Edit! Используй SpinEdit!
if (Spinedit1.Value<>0) and (Spinedit1.Value<>0) and (Spinedit1.Value<>0) then! А если нужны дробные, замени все OR'ы между скобками на AND'ы! Все! Еще один восклицательный знак для красоты! И Еще один! Зачем ты каждое предложение заканчиваешь восклицательными знаками?!
PS: Ну и еще 2 в 1!! (2 восклицательных знака в 1 предложении!!)
TUser © (13.08.04 8:55) [1]
Нет. Хуже. Твой код все-равно придется заменить на обычный, если дать уникальные имена эдитам.
antonn © (13.08.04 10:03) [3]
К StrToFloat еще надо try.
antonn (2004-08-13 10:03:00) [9]if (lenght(Edit1.text)<>0) and (lenght(Edit2.text)<>0) and (lenght(Edit3.text)<>0) then begin
if (strtofloat(Edit1.text)<>0) and (strtofloat(Edit2.text)<>0) and (strtofloat(Edit3.text)<>0) then begin
........//Делаем, что надо
end;end;
Только делиметер надо проверять, если число дробное.
А если заранее известно что не дробное то strtofloat заменить на strtoint.
BillyJeans (2004-08-13 09:00:00) [10]2 TUser © (13.08.04 08:55) [1]
а если последний S<>'0' ?
TUser (2004-08-13 08:55:00) [11]Во-первых, есть еще and.
И лучше, наверное, так
result:=true; i:=1;
while result and (i < 4) do begin
S:=(FindComponent('Edit'+inttostr(i)) as TEdit).Text;
result:=(S = '0') or (S = '');
inc (i);
end;
if result then ...