Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка на заполненость нескольких эдитов [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 ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо