检查对象是否在delphi中创建

时间:2011-09-14 13:41:18

标签: delphi

我正在使用Delphi 7构建一个应用程序。我在主窗体上添加了一个按钮。在该按钮上单击我想显示另一个表单。我只是在用户第一次点击该按钮时才尝试创建第二个表单。如果用户再次单击该按钮,则应显示已创建的表单。 Form对象是否具有任何属性,我们可以通过该属性直接检查它是否已创建?

4 个答案:

答案 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;