컴포넌트를 동적으로 생성시키구 아래와 같이 코딩을 했습니다.
그런데 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시킬때 짝수번째 라벨만 삭제가 됩니다...
>
> 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;