Q&A

  • FindComponent의 결과가 이상하다?!
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이 일어납니다.

왜 그렇죠?

2  COMMENTS
  • Profile
    안정한 1999.12.02 03:45
    박성훈 wrote:

    > 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'를 붙이셔도 되지만...



  • Profile
    통신초짜 1999.12.02 22:22
    안정한 wrote:

    > 박성훈 wrote:

    > > FindComponent를 사용하여 해당컴포를 찾는 작업을 하다가 이상해서 질문올립니다.

    > >

    > > CurPanel:TPanel;

    > > > > begin

    > > CurPanel:= (Self.Components[i] as TPanel);

    > > Exit;

    > > end;

    > > end;

    > >

    > > ⓑ

    > > CurPanel:= TPanel(FindComponent('T'+Edit1.Text)));

    > > ⓐ

    > > 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



    > >

    > > 위에서 ⓐ는 잘 작동을 하는데 ⓑ로 하면 Access Violation이 일어납니다.

    > > 왜 그렇죠?

    >

    > 답변] 'T'를 왜 붙이죠

    >

    > CurPanel := TPanel(FindComponent(Edit1.Text));

    > CurPanel.caption := 'Ok';

    > 이렇게 해보시죠

    > FindComponent에 parameter는 Component Name즉 String입니다.

    >

    > Form에 있는 Panel의 이름이 Tpanel이면 'T'를 붙이셔도 되지만...

    >



    'T'를 붙인 이유는 좌석(Table)을 나타내는 패널이라는 의미에서입니다. 클래스에 붙이는 'T'는 절대 아닙니다.