자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 델파이 중복 폼 방지 질문드립니다.
2019.05.23 10:51
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
IF NOT Assigned(Form5) THEN
begin
Form5 := TForm5.Create(self);
exit;
end;
이렇게 했습니다. Form5는 자식폼이고 부모폼도 있습니다.
Form5 실행 후 다시 Form5 실행하려고하면 실행이 안되서 해결했다 했는데
Form5를 닫고 다시 Form5을 실행하면 뜨지가 않습니다. exe 실행시 Form5가 한번만 실행이 되는게 아니라 하나만 실행이 되게 하고싶습니다. 어떤식으로 해야하나요..?
Delphi 델파이 중복 폼 방지 질문드립니다.
2019.05.23 10:51
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
IF NOT Assigned(Form5) THEN
begin
Form5 := TForm5.Create(self);
exit;
end;
이렇게 했습니다. Form5는 자식폼이고 부모폼도 있습니다.
Form5 실행 후 다시 Form5 실행하려고하면 실행이 안되서 해결했다 했는데
Form5를 닫고 다시 Form5을 실행하면 뜨지가 않습니다. exe 실행시 Form5가 한번만 실행이 되는게 아니라 하나만 실행이 되게 하고싶습니다. 어떤식으로 해야하나요..?
Form5는 TForm5의 인스턴스 변수입니다. 즉 TForm5를 생성한 객체를 담고있습니다.
Assigned() 함수는 객체가 할당되어 있는지 확인하는 함수입니다.(Form5 <> nil 과 동일)
즉 할당되어 있지 않으면(not Assigned) 인스턴스 변수에 객체를 생성해 할당하는 코드를 동작하도록 작성하셨네요.
문제는 폼을 닫으면 그 다음부터 폼이 표시되지 않을 수 있습니다.
그래서, 폼을 닫을때 인스턴스 변수를 초기화 하는 코드가 필요합니다.
일반적으로 폼의 클로즈 이벤트(OnClose)에 아래와 같이 구현합니다.
procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form5 := nil;
end;