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

Вниз

Как с помощью цикла перевести из десятка edit в массив?   Найти похожие ветки 

 
Bestden   (2004-04-21 20:46) [0]

Как с помощью цикла перевести из десятка edit в массив?
Например существует у меня 15 Tedit, назвал я их a1, a2, ... a15! Как мне циклом перевести из ai.text в arr[i]?


 
VMcL ©   (2004-04-21 20:47) [1]

FindComponent
?


 
Yanis ©   (2004-04-21 20:56) [2]


var
 ar:array[0..15] of string;
...
for i := 0 to Form1.ControlCount-1 do
 if Form1.Components[i] is TEdit then
   ar[i] := (Components[i] as TEdit).Text;

Но это учень "узкий" цикл - алгоритм. Если колво Edit"ов за ранее не известно, то ИМХО лучше динамический массив юзать.


 
Bestden   (2004-04-21 20:56) [3]

Что то я не пойму...
ну на такое транслятор ругается A1[i]:=StrToInt(findcomponent(a1+inttostr(i)).Text);
По идее с помощью findcomponent можно сделать массив объектов...


 
Bestden   (2004-04-21 20:57) [4]

yanis Спасибо!


 
Piter ©   (2004-04-21 22:13) [5]

Строчку

ar[i] := (Components[i] as TEdit).Text

можно заменить на

ar[i] := TEdit(Components[i]).Text

Так будет более оптимально :)


 
Leshiy ©   (2004-04-22 06:19) [6]

Yanis ©   (21.04.04 20:56) [2]
А если на форме будут другие контролы (акромя TEdit"a)???

Bestden   (21.04.04 20:56) [3]
a[i]:=TEdit(FindComponent("a"+IntToStr(1))).Text;


 
Yanis ©   (2004-04-22 07:38) [7]

To [6]
>А если на форме будут другие контролы (акромя TEdit"a)???
И что тогда?


 
Leshiy ©   (2004-04-22 07:59) [8]

Yanis ©   (22.04.04 07:38) [7]
ControlCount>16;
1.В массиве будут "дырки";
2.Out of Range;
3.Значения не всех Tedit"ов попадут в массив;


 
Kto ©   (2004-04-24 13:12) [9]

Leshiy ©   (22.04.04 06:19) [6]
А если на форме будут другие контролы (акромя TEdit"a)???

var
ar:array {[0..15]}of string;
...
J:= 0;
for i := 0 to Form1.ControlCount-1 do
if Form1.Components[i] is TEdit then
begin
  SetLength(Ar, J+1);
  ar[J] := (Components[i] as TEdit).Text;  
  Inc(J)
end

И вот нам уже всё равно сколько на форме контролов и какие они там.


 
Kto ©   (2004-04-24 13:14) [10]

Что-то у меня не везде жирный шрифт нарисовался, но я думаю разобраться и найти отличия не сложно ;)


 
pavia   (2004-04-24 14:10) [11]

1 if Form1.Components[i] is TEdit then
2 (Components[i] as TEdit)
Это одно и тоже.


 
Kto ©   (2004-04-24 14:33) [12]

pavia   (24.04.04 14:10) [11]
Ага, сейчас, как же. Очень смешно. >:(

1 if Form1.Components[i] is TEdit then
проверка является ли i-тый компонент на форме экземпляром класса TEdit
(Components[i] as TEdit)
Обращение к компоненту как к TEdit"у (т.б. приведение типа). Если на самом деле Components[i] не TEdit, то будут траблы (логично не правда ли ?).

Components: array of TComponent;


 
evvcom ©   (2004-04-24 16:30) [13]


> то будут траблы

Какие траблы?

> Если на самом деле Components[i] не TEdit

то
if Form1.Components[i] is TEdit
будет ложным.


 
Kto ©   (2004-04-24 16:39) [14]

pavia   (24.04.04 14:10) [11]
1 if Form1.Components[i] is TEdit then
2 (Components[i] as TEdit)
Это одно и тоже.

Насколько я понял, из этого поста следует предложение один из пунктов убрать...

А траблы будут, если проверку не поставить. Согласись, будет возвращаться чёрт знает что, если попадётся неTEdit.


 
evvcom ©   (2004-04-24 16:44) [15]

Потерял немного нить того, кто чего сказал. Это pavia   (24.04.04 14:10) [11] не прав. Соглашаюсь...


 
Piter ©   (2004-04-24 19:42) [16]

Kto (24.04.04 14:33) [12]
Обращение к компоненту как к TEdit"у (т.б. приведение типа).


не правда. Никаких траблов не будет.
as проверяет возможно ли приведение типов, иначе гененирует исключение.

Обращение же как к edit"у будет таково: TEdit(componentname).
и вот если тут componentname не TEdit - то будут траблы


 
Kto ©   (2004-04-26 12:50) [17]

Piter ©   (24.04.04 19:42) [16]
Не знал. Проверил - убедился ;). Спасибо.



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

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

Наверх




Память: 0.5 MB
Время: 0.098 c
14-1079517038
YurikGl
2004-03-17 12:50
2004.04.11
АнтиСпам


14-1081973550
Ломброзо
2004-04-15 00:12
2004.04.11
А хто пишет "Хокку для души"??


6-1079517703
NetMan2
2004-03-17 13:01
2004.04.11
Обновление списка клиентов ClientSocket


1-1080204864
new
2004-03-25 11:54
2004.04.11
Индивидуальный номер


1-1080300539
Ev1972
2004-03-26 14:28
2004.04.11
Как отследить клик за пределами модального окна?