我正在使用Delphi 7构建一个应用程序。我在主窗体上添加了一个按钮。在该按钮上单击我想显示另一个表单。我只是在用户第一次点击该按钮时才尝试创建第二个表单。如果用户再次单击该按钮,则应显示已创建的表单。 Form对象是否具有任何属性,我们可以通过该属性直接检查它是否已创建?
答案 0 :(得分:11)
if Assigned(Form1) then
begin
//form is created
end;
但如果您的表单在本地声明全局,则必须确保将其初始化为nil
。
答案 1 :(得分:4)
您需要一个成员字段来保存对表单的引用。然后检查是否已分配该引用。像这样:
function TMainForm.GetOtherForm: TMyForm;
begin
if not Assigned(FOtherForm) then
FOtherForm := TMyForm.Create(Self);
Result := FOtherForm;
end;
答案 2 :(得分:2)
Assigned(Obj)即使在你释放它之后仍然可以返回True,使用" Obj.free"。 保证你的obj的最好方法是免费的,因为使用Assigned(obj)正在使用" FreeAndNil(Obj)"
答案 3 :(得分:0)
有时形式是免费的,但不是零。 在这种情况下,Assigned的检查不太好。 因此,一种选择是释放表单并在OnClose表单上设置MyForm:= nil。 另一种选择是使用以下过程:
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;