Q&A

  • 컴포넌트를 동적 생성시키고 삭제할려고 합니다.
컴포넌트를 동적으로 생성시키구 아래와 같이 코딩을 했습니다.



그런데 Free시킬때 짝수번째 라벨만 삭제가 됩니다...



ex> 1 삭제후 1

2

3 3

4

5 5

6

7 7

8

9 9

10



왜 이런가요?



아래는 소스입니다...



procedure TForm1.Button1Click(Sender: TObject);

var

cnt : integer;

begin

for cnt := 1 to 10 do

begin

lbl := tlabel.create(self);



with lbl do

begin

parent := panel1;

left := 50;

top := cnt * 20 ;

width := 50;

height := 14;

name := 'label'+inttostr(cnt);

caption := inttostr(cnt);

visible := true;

end;

end;

end;



procedure TForm1.Button2Click(Sender: TObject);

var

cnt : integer;

begin

for cnt := 0 to panel1.controlCount-1 do panel1.controls[cnt].Free;



end;



1  COMMENTS
  • Profile
    김영해 2000.08.26 00:52
    권경미 wrote:

    > 컴포넌트를 동적으로 생성시키구 아래와 같이 코딩을 했습니다.

    >

    > 그런데 Free시킬때 짝수번째 라벨만 삭제가 됩니다...

    >

    > ex> 1 삭제후 1

    > 2

    > 3 3

    > 4

    > 5 5

    > 6

    > 7 7

    > 8

    > 9 9

    > 10

    >

    > 왜 이런가요?

    >

    > 아래는 소스입니다...

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > cnt : integer;

    > begin

    > for cnt := 1 to 10 do

    > begin

    > lbl := tlabel.create(self);

    >

    > with lbl do

    > begin

    > parent := panel1;

    > left := 50;

    > top := cnt * 20 ;

    > width := 50;

    > height := 14;

    > name := 'label'+inttostr(cnt);

    > caption := inttostr(cnt);

    > visible := true;

    > end;

    > end;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > var

    > cnt : integer;

    > begin

    > for cnt := 0 to panel1.controlCount-1 do panel1.controls[cnt].Free;

    >

    > end;

    >



    뒤집으면 되여...

    이유는요......free시키는 순간 controlCount가 변하니까 중간에 이빨빠지는 형태가 될수 밖에요.....





    for cnt := panel1.controlCount-1 downto 0 do panel1.controls[cnt].Free;