你的方法也可以。
if form3=nil then 
 form3:=Tform3.Create(self);
 form3.Show;

解决方案 »

  1.   

    if (form3=nil) or (not Assigned(form3)) then 
     form3:=Tform3.Create(self);
     form3.Show;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var
      form3:Tform3;
    begin
     if form3=nil then 
     form3:=Tform3.Create(self);
     form3.Show;
    end;
      

  3.   

    楼上各位:
     好象不可以吧:
     为什么我在编译的时候总是说form2,form3没有被初始划呢?
     而且即使能运行,在触发了事件后,也不响应呀?
      等待
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var
      form3:Tform3;
    begin
     form3:=Tform3.Create(Application);
     form3.Show; 
    end; 
    在处理Form3的OnClose事件
    在OnClose中加入  Action:=caFree;
      

  5.   

    楼上,是不是说用了Action:=caFree后,所有分配给该Form的资源将都被释放,相当于调用了Form.Free,而不用考虑内存泄漏问题了?
      

  6.   

    不是这样的,你可以在Delphi中调试一下。
     真的有问题
     希望有人指点一下
      

  7.   

    不好意思,少加了一行代码,按下列代码试试
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      form3:Tform3;
    begin
     form3:=nil
     form3:=Tform3.Create(self);
     form3.Show; 
    end; 再在处理Form3的OnClose事件
    在OnClose中加入  Action:=caFree;
      

  8.   

    你的意思是为无模式窗体Form3.在单击事件中,如果有Form3窗体,则直接显示这个窗体,如果没有这个窗体,就先创建,然后在显示。如果是这样,可以通过Screen.Forms来遍历一下是否有TForm3类型的窗体。
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      frmFind:Tform3;
    begin
      frmFind := ExistForm(TForm3);
      if not Assigned(frmFind) then begin
        frmFind:=Tform3.Create(self);
      frmFind.Show; 
    end; procedure TForm1.ExistForm(const clsForm: TFormClass);
    var
      iIndex: Integer;
    begin
      Result := nil;
      if clsForm = nil then Exit;
      for iIndex := 0 to Screen.FormCount - 1 do beign
        if (Screen.Forms[iIndex] is clsForm) then begin
          Result := Screen.Forms[iIndex];
          Exit;
        end;
      end;
      
    end; 
      

  9.   

    Sorry. 方法ExistForm应该有一个返回值:TForm类型
      

  10.   


    implementation
    Uses Unit2,unit3;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if application.FindComponent('form3')=nil then
          application.CreateForm(Tform3,form3);
     form3.Show;
    end;
    ....
    即可
      

  11.   

    对于form3的释放在其他模块作