안녕하세요 따랑님 :) 오늘 두번이나 뵙네요.
팁, 트릭 란에 올리신 질문은 삭제 해주시고요,
답변입니다.
파괴를 하는 루틴에서는 looping 할 때 역순으로 해야 합니다.
5개의 컴포넌트를 찾아 파괴하는 시나리오를 생각해 보면
각각의 인덱스가 아래와 같이 있다고 가정하고,
0, 1, 2, 3, 4
파괴를 위한 루핑을 시작합니다.
i 는 0 일때 1번 돌면
0, 1, 2, 3
i 는 1 일때 2번 돌면
0, 1, 2
i 는 2 일때 3번 돌면
0, 1
문제가 발생합니다.
때문에 리스트(Components)에 담긴 인스턴스를 파괴할려면
for i := ComponentCount - 1 down 0 do
beign
// Do destory Instance
end;
와 같이 작업하셔야 합니다.
즐코하세요 :)
따랑 님이 쓰신 글 :
: 안녕하셔요
: 컴포넌트를 Button,Edit,Label등을 반목하여 생성하여 ㅅ해제후 또 생성하는 작업입니다
: 생성과 해제가 반복되는 작업입니다.
: 그런데 같은 컴포넌트를 찾아서 해제하는 작업에 문제가 있습니다.
: 부탁드립니다.
: 소스는 아래와 같습니다.
:
: For i:=0 to Self.ComponentCount-1 Do Begin
: If (Pos('aSend_' ,TButton(Self.Components[i]).Name)<>0) Or
: (Pos('aDelete' ,TButton(Self.Components[i]).Name)<>0) Then TButton(Self.Components[i]).Free
: Else If (Pos('aEdit_' ,TEdit (Self.Components[i]).Name)<>0) Then TEdit (Self.Components[i]).Free
: Else If (Pos('aMemo_' ,TMemo (Self.Components[i]).Name)<>0) Then TMemo (Self.Components[i]).Free
: Else If (Pos('aLabel_' ,TLabel (Self.Components[i]).Name)<>0) Then TLabel (Self.Components[i]).Free
: Else If (Pos('aShape_' ,TShape (Self.Components[i]).Name)<>0) Then TShape (Self.Components[i]).Free
: Else If (Pos('aImage_' ,Timage (Self.Components[i]).Name)<>0) Then Timage (Self.Components[i]).Free;
: End;
: