Q&A

  • Controls[]를 이용해서 Component를 루프돌릴때의 질문입니다.
보통은,

for i:=1 to Form1.ControlCount - 1 do

if (Controls[j] is TEdit)and(Controls[j].Tag=i) then begin

doSomething;

end;

end;



이렇게 하는데, Form1에 PageControl이 있고, 그 위에 Panel1이 있고, 그 위에 Edit1이 있을 때, 이 Edit1을 control하려면, 루프를 네개를 써야 합니까?

Form1에서 PageControl1을 찾고, PageControl1에서 Panel1을 찾고, Panel1에서 Edit1을 찾아서 control해 주어야 하는냐는 것입니다.

제가 해보았더니, Form1에는 루프를 돌려도 PageControl1밖에 Control이 안잡히더라고요. 그래서,



for i:=0 to Form1.ControlCount - 1 do begin

if Form1.Controls[i] is TPageControl then begin

for j:=0 to TPageControl(Form1.Control[i]).ControlCount - 1 do begin

if TPageControl(Form1.Control[i]).Controls[j] is TPanel then begin

...

...

doSomething;

end;

end;

end;

end;



이렇게 계속 루프가 반복이 되는데, 이걸 Form1에서 바로 TEdit를 찾을 수 없을까요?

조언 부탁합니다.



1  COMMENTS
  • Profile
    초보의비애 2001.09.22 23:29
    석 wrote:

    > 보통은,

    > for i:=1 to Form1.ControlCount - 1 do

    > if (Controls[j] is TEdit)and(Controls[j].Tag=i) then begin

    > doSomething;

    > end;

    > end;

    >

    > 이렇게 하는데, Form1에 PageControl이 있고, 그 위에 Panel1이 있고, 그 위에 Edit1이 있을 때, 이 Edit1을 control하려면, 루프를 네개를 써야 합니까?

    > Form1에서 PageControl1을 찾고, PageControl1에서 Panel1을 찾고, Panel1에서 Edit1을 찾아서 control해 주어야 하는냐는 것입니다.

    > 제가 해보았더니, Form1에는 루프를 돌려도 PageControl1밖에 Control이 안잡히더라고요. 그래서,

    >

    > for i:=0 to Form1.ControlCount - 1 do begin

    > if Form1.Controls[i] is TPageControl then begin

    > for j:=0 to TPageControl(Form1.Control[i]).ControlCount - 1 do begin

    > if TPageControl(Form1.Control[i]).Controls[j] is TPanel then begin

    > ...

    > ...

    > doSomething;

    > end;

    > end;

    > end;

    > end;

    >

    > 이렇게 계속 루프가 반복이 되는데, 이걸 Form1에서 바로 TEdit를 찾을 수 없을까요?

    > 조언 부탁합니다.

    >







    단순히 컴포넌트를 찾는것이라면 아래와 같이 함 해보세염.



    for i:=1 to Form1.ComponentCount - 1 do

    if (Components[i] is TEdit) then

    if (Components[i] as TEdit).tag = i then

    begin

    doSomething;

    end;