Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизПроверка на заполненость нескольких эдитов Найти похожие ветки
← →
CRACKISH (2004-08-13 08:52) [0]Люди вот у меня есть дапустим 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! Помогите! Спасибо!
← →
TUser © (2004-08-13 08:55) [1]Во-первых, есть еще 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 ...
← →
BillyJeans (2004-08-13 09:00) [2]2 TUser © (13.08.04 08:55) [1]
а если последний S<>"0" ?
← →
antonn © (2004-08-13 10:03) [3]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.
← →
GrayFace © (2004-08-13 10:30) [4]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.
← →
GrayFace © (2004-08-13 10:31) [5]> уникальные имена
т.е. особые: EditCount и т.д.
← →
KSergey © (2004-08-13 10:31) [6]> [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), т.к. в авторском посте не понял что именно надо.
← →
IceBeerg © (2004-08-13 12:21) [7]А еще можно If Length(Edit1.Text)+Length(Edit2.Text)+Length(EditХ.Text)=0 Then ...
← →
Алхимик © (2004-08-13 12:40) [8]
> [7] IceBeerg © (13.08.04 12:21)
У тебя на ноль ("0") не проверяется. А автор хочет.
← →
Ega23 © (2004-08-13 12:58) [9]Не парься с 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= ....
← →
GrayFace © (2004-08-15 13:20) [10]Ega23 © (13.08.04 12:58) [9]
> Хреновый компонент-то...
Да.
← →
Юрий Зотов © (2004-08-15 15:14) [11]> CRACKISH (13.08.04 08:52)
Можете оставить все как есть, только перед Вашим оператором if вставьте вот такую штучку:
{$B+}
а после него вот такую:
{$B-}
Потом сделайте Build (не Compile), и все заработает.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c