mdi 폼에서 mdichild를 선택하면 처음 한번은 오류가 없이 실해이 되는데
폼을 닫은 후 다시 열면 오류가 발생합니다.
다른 mdichild는 괜찮은데 한 폼에서만 오류가 나오는데 혹시 알고계시는 고수님 도움좀 부탁드립니다.
폼 호출 메뉴루틴입니다.
procedure TfrmMain.mnu4002Click(Sender: TObject);
begin
IF ((frmPa0005 = nil) or (not frmPa0005.HandleAllocated)) then
frmPa0005 := TFrmPa0005.Create(Self);
frmPa0005.Show;
end;
unit ...;
....
TfrmPa0005 = class(TForm)
...
var
frmPa0005 : TfrmPa005;
....
이와같이 구성 되어 있을때
다른폼에서
frmPa0005 := TfrmPa005.Create(Self);
이런식으로 불러서 쓴다면
frmPa0005 변수에는생성된 Object(TfrmPa005.Create(Self))의 주소가
들어갑니다.
frmPa0005.free;
(close 일때 Cafree 도 마찬가지);
이런식으로 해제 할경우
frmPa0005 변수의 주소에 있는 Object를 Free 시킵니다.
그러나 frmPa0005라는 변수에는 해당 주소는 지우지 않았기에
Free되어진 Object주소가 있는거죠
예로
frmPa0005 := TfrmPa005.Create(Self);
frmPa0005 := TfrmPa005.Create(Self);
frmPa0005 := TfrmPa005.Create(Self);
frmPa0005 := TfrmPa005.Create(Self);
이런식으로 4번 Create하였다면 frmPa0005에는 마지막 생성된 객체의
주소가 들어갑니다.
그럼 위의 3개의 폼은 어떻게 될까요
해당폼을 지칭하는 변수만 없을뿐 다 생성된것이죠
즉, frmPa0005 은 단지 변수일뿐 Object는 아닙니다.
frmPa0005라는 변수에 nil값을 넣는것은 귀하의 프로그램 구성상
옳은 행위입니다.