FindComponent를 사용하여 해당컴포를 찾는 작업을 하다가 이상해서 질문올립니다.
CurPanel:TPanel;
ⓐ
for i:=0 to Self.ComponentCount-1 do begin
if (Self.Components[i] is TPanel) then
if (Self.Components[i] as TPanel).Name='T'+Edit1.Text then
begin
CurPanel:= (Self.Components[i] as TPanel);
Exit;
end;
end;
ⓑ
CurPanel:= TPanel(FindComponent('T'+Edit1.Text)));
위에서 ⓐ는 잘 작동을 하는데 ⓑ로 하면 Access Violation이 일어납니다.
왜 그렇죠?
> FindComponent를 사용하여 해당컴포를 찾는 작업을 하다가 이상해서 질문올립니다.
>
> CurPanel:TPanel;
>
> ⓐ
> for i:=0 to Self.ComponentCount-1 do begin
> if (Self.Components[i] is TPanel) then
> if (Self.Components[i] as TPanel).Name='T'+Edit1.Text then
> begin
> CurPanel:= (Self.Components[i] as TPanel);
> Exit;
> end;
> end;
>
> ⓑ
> CurPanel:= TPanel(FindComponent('T'+Edit1.Text)));
>
> 위에서 ⓐ는 잘 작동을 하는데 ⓑ로 하면 Access Violation이 일어납니다.
> 왜 그렇죠?
답변] 'T'를 왜 붙이죠
CurPanel := TPanel(FindComponent(Edit1.Text));
CurPanel.caption := 'Ok';
이렇게 해보시죠
FindComponent에 parameter는 Component Name즉 String입니다.
Form에 있는 Panel의 이름이 Tpanel이면 'T'를 붙이셔도 되지만...