我正在使用Delphi 7構建一個應用程序。我在主窗體上添加了一個按鈕。在那個按鈕上點擊我想顯示另一個表單。我只在用戶第一次點擊那個按鈕時試圖創建第二個表單。如果用戶第二次單擊該按鈕,則應該顯示已經創建的表單。一個Form對象是否有可以直接檢查它是否已經創建的屬性?檢查對象是否創建或不在德爾福
5
A
回答
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
即使在釋放它之後,使用「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;
相關問題
- 1. 創建德爾福
- 2. 德爾福在對象RTTI
- 3. 德爾福DFM檢查器
- 4. 德爾福拼寫檢查
- 5. (德爾福)檢查狀態
- 6. 德爾福7對象undefinedat
- 7. 德爾福對象引用
- 8. 是否有德爾福XE
- 9. 德爾福 - 在新創建的表單上創建表單並創建對象
- 10. 德爾福 - 在運行時創建的問題引用對象
- 11. 德爾福檢查TThread是否仍在運行
- 12. 德爾福:檢查文件是否在使用
- 13. 德爾福 - 布爾屬性是可用的,即使對象尚未創建
- 14. 檢查對象是否是一個循環中創建或不
- 15. 從IXMLDOMDocument2對象在德爾福
- 16. 德爾福XE2:在TAcionManager對象
- 17. 德爾福 - 通用型檢查,如果創建
- 18. 德爾福網格面板檢查單元格是否爲空
- 19. 檢查是否需要Focus Rect(德爾福)
- 20. TMenuItem自動檢查與德爾福5
- 21. 德爾福 - 檢查OSX上的Dropbox
- 22. Windows拼寫檢查和德爾福7?
- 23. 德爾福彈出菜單檢查
- 24. 德爾福 - 檢查長使用POS
- 25. 德爾福面向對象方法
- 26. 閱讀內JSON對象德爾福
- 27. 如何連接德爾福.NET對象
- 28. 德爾福XE4給E2036「對象的
- 29. 德爾福函數返回類對象
- 30. 解決中的TDataSetProvider德爾福2010年或德爾福2009年
(我只是刪除我相同的答案),但需要補充的是一定要變在破壞TOtherForm,就像把TOtherForm重置回零:=零在TOtherForm的OnDestroy上。 –
@Hasan如果其他表單被刪除。我的印象是,它的目的是成爲一種永恆的形式,一旦它被創造出來。 –
確切地說,只是爲了讓人放心,預測將來的形式(明確地或者出於任何原因)處理的情況 - 所以它不會引入「新的錯誤」。 –