2011-09-14 26 views
5

我正在使用Delphi 7構建一個應用程序。我在主窗體上添加了一個按鈕。在那個按鈕上點擊我想顯示另一個表單。我只在用戶第一次點擊那個按鈕時試圖創建第二個表單。如果用戶第二次單擊該按鈕,則應該顯示已經創建的表單。一個Form對象是否有可以直接檢查它是否已經創建的屬性?檢查對象是否創建或不在德爾福

回答

10
if Assigned(Form1) then 
begin 
    //form is created 
end; 

但是如果你的表格是本地 全球 宣佈你必須確保它被初始化爲nil

4

您需要一個成員字段來保存對錶單的引用。然後檢查是否分配了該參考。像這樣:

function TMainForm.GetOtherForm: TMyForm; 
begin 
    if not Assigned(FOtherForm) then 
    FOtherForm := TMyForm.Create(Self); 
    Result := FOtherForm; 
end; 
+2

(我只是刪除我相同的答案),但需要補充的是一定要變在破壞TOtherForm,就像把TOtherForm重置回零:=零在TOtherForm的OnDestroy上。 –

+0

@Hasan如果其他表單被刪除。我的印象是,它的目的是成爲一種永恆的形式,一旦它被創造出來。 –

+0

確切地說,只是爲了讓人放心,預測將來的形式(明確地或者出於任何原因)處理的情況 - 所以它不會引入「新的錯誤」。 –

2

即使在釋放它之後,使用「Obj.free」,Assigned(Obj)仍然可以返回True。 確保您的obj的最佳方式是免費的,使用Assigned(obj)正在使用「FreeAndNil(Obj)」

0

有時窗體已經免費,但它不是零。 在這種情況下,Assigned的檢查不太好。 所以一個選項是釋放窗體並在OnClose窗體上設置MyForm:= nil。 另一種選擇是使用以下PROC:

function TMyForm.IsFormCreated: bool; 
var i: Integer; 
begin 
    Result := False; 
    for i := 0 to Screen.FormCount - 1 do 
    begin 
    if Screen.Forms[i] is TMyForm then 
    begin 
     Result := True; 
     Break; 
    end; 
    end; 
end;