Q&A

  • Accessviolance error....
음....



MDIForm에서 Childform을 동적 생성하고 삭제하고 있습니다.

일반적인 생성과 삭제는 별 문제가 없었는데, 다음의 경우에

에러가 생기네요.

.

.

procedure MainForm.N1click(Sender:Tobject);

Var form2: TForm2;

begin

if MessageDlg('사용중인 창을 닫습니다', mtConfirmation, [mbYes, mbNo],

0) = mrYes then

begin

form1.close;



form2 := TForm2.Creat(Application);

form2.show;

end;

여기에서 form1.close에서 에러가 납니다.



물론 form1의 Onclose 이벤트에 Action := Cafree를 적어 주었고,

form1은 동적 생성한 폼입니다.



MainForm은 fsMDIForm 입니다.



제가 델파이를 안쓰던 기간이 꽤 길어서 잊어 먹은게 많걸랑요.

그래서 에러가 나는 이유를 도저히 모르겠네요.



여러 고수님들의 조언 부탁드립니다.



꾸벅꾸벅...

1  COMMENTS
  • Profile
    안치봉 1999.05.28 04:17
    김태균 께서 말씀하시기를...

    > 음....

    >

    > MDIForm에서 Childform을 동적 생성하고 삭제하고 있습니다.

    > 일반적인 생성과 삭제는 별 문제가 없었는데, 다음의 경우에

    > 에러가 생기네요.

    > .

    > .

    > procedure MainForm.N1click(Sender:Tobject);

    > Var form2: TForm2;

    > begin

    > if MessageDlg('사용중인 창을 닫습니다', mtConfirmation, [mbYes, mbNo],

    > 0) = mrYes then

    > begin

    > form1.close;

    >

    > form2 := TForm2.Creat(Application);

    > form2.show;

    > end;

    > 여기에서 form1.close에서 에러가 납니다.

    >

    > 물론 form1의 Onclose 이벤트에 Action := Cafree를 적어 주었고,

    > form1은 동적 생성한 폼입니다.

    >

    > MainForm은 fsMDIForm 입니다.

    >

    > 제가 델파이를 안쓰던 기간이 꽤 길어서 잊어 먹은게 많걸랑요.

    > 그래서 에러가 나는 이유를 도저히 모르겠네요.

    >

    > 여러 고수님들의 조언 부탁드립니다.

    >

    > 꾸벅꾸벅...



    안녕하세요.



    혹시 폼1을 지역변수로 선언한뒤 동적 생성시켜주신건 아닌지요...그리고 사용할때는 전역적인 폼1을 사용한건 아닌지요..



    예를 들어...



    procedure MainForm.N1click(Sender:Tobject);

    Var

    form2: TForm2; // 지역변수라서 프로시져가 끝날때 이 변수는 더이상 엑세스할수 없습니다.

    begin

    form2 := TForm2.Create(Application);

    ...

    ...

    ...

    end;



    procedure MainForm.Test;

    begin

    form2.Caption := '111'; <<= 엑세스 바이올레이션이 납니다.

    end;