我在设计期设计了不少窗体,为不影响程序的运行效率,在Project Options里设置除主窗体的其它窗体为Available forms,并在程序合适的地方适当的调用(声明用use,显示窗体用showmodal)。
这看起来不错,可现在的问题是某些窗体需要重复调用...那么,这种showmodal方式是否妥当?为什么?有更佳的方式吗?请老师们指点迷津啊!!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2 := TForm2.Create(Self);
      try
        Form2.ShowModal;
      finally
        Form2.Free;
        Form2 := nil;
      end;
    end;
      

  2.   

    你的做法很好啊。。只不过你可能需要在窗体销毁前记录一下用户的输入,比如,EDIT里的值,可能需要保存下来这个是小问题。没什么好说的。用些全局量,在再次创建窗体后,恢复这些值。免的用户重复输入。
      

  3.   

    从一个主窗体中频繁调用其它动态生成的窗体,这样做,问题不大;可是,想在本来就已经是动态生成的窗体中再另外调用动态生成的窗体,会不会形成程序死循环啊?!另外,我想Free都不行啊!!!郁闷ing
      

  4.   

    不一定要关闭,只需要将它的visible属性设为false就OK了
      

  5.   

    我们把问题说的简单一点:在主窗体上,点击按钮1生成窗体2;再在窗体2上点击按钮3,生成窗体4。该注意什么?楼上的意思是说,把窗体2的visible设为false就可以了,是这个意思吗??大家帮帮忙啊
      

  6.   

    我试过了,不行啊大家看看,有没有问题啊
    1、
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     with TForm2.Create(self) do
     begin
       ShowModal;
       free;
     end;
    end;2、
    procedure TForm2.Button1Click(Sender: TObject);
    begin
     with TForm3.Create(self) do
     begin
      // Form3.Visible := true;
       ShowModal;
       free;
     end;
    end;3、
    procedure TForm3.FormCreate(Sender: TObject);
    begin
      self.OleContainer1.CreateObjectFromFile('H:\a1b2\zzpxb.doc',true);
      self.OleContainer1.DoVerb(OvShow);
    end;