2013-10-24 3 views
-1

자식이 여러 번 생성되는 것을 방지하려면 어떻게해야합니까? 예 : 로그인 양식. 로그인 양식을 열기 전에 하위 항목을 반복하지 않고 다른 인스턴스가 만들어 졌는지 확인하는 솔루션이 있습니까?MDI에서 여러 자식을 만들지 않게하는 방법

+0

양식은 사고에 의해 생성되지 않습니다. 당신은 그들을 창조합니다. 그래서, 당신은 선택할 수 없습니다. –

+0

예, 사용자가 그 일을하지 못하게하는 방법이 궁금합니다. "멀티 폼"또는 무언가를위한 옵션이있을 수도 있습니다. –

+0

당신은 폼을 만들 수있는 힘을주었습니다. 그것들을 만드는 것은 당신의 코드입니다. –

답변

1

기본적으로 각 양식에는 선언 된 전역 포인터가 있습니다. 설문지를 자동 생성하지 않더라도 해당 포인터를 계속 활용할 수 있습니다. 모든주는 양식, 시작시 글로벌 포인터를 nil 초기화하십시오. nil에 대한 포인터를 확인하기 전에 해당 폼의 새 인스턴스를 만들고, 닫을 때 폼을 파괴하고 폼이 소멸 될 때 다시 글로벌 포인터를 nil으로 다시 설정하십시오. 예를 들어 :

unit LoginForm; 

interface 

... 

type 
    TLoginForm = class(TForm) 
    ... 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    procedure FormDestroy(Sender: TObject); 
    ... 
    end; 

var 
    LoginForm: TLoginForm = nil; // <-- here 

implementation 

... 

procedure TLoginForm.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    Action := caFree; 
end; 

procedure TLoginForm.FormDestroy(Sender: TObject); 
begin 
    LoginForm := nil; 
end; 

... 

end. 

procedure TMainForm.SomeProcedure; 
begin 
    ... 
    if not Assigned(LoginForm) then 
    LoginForm := TLoginForm.Create(Self); 
    LoginForm.Show; 
    ... 
end;