一个窗体是打开的begin
if not Assigned(Frmadvinsert) then
  Frmadvinsert  := TFrmadvinsert.Create(Application);
  try
  frmadvinsert.opemode:='insert';
  Frmadvinsert .Caption :='广告信息-添加';
    Frmadvinsert.Show  ;
  finally
    Frmadvinsert.free;
  end;
end;
可是为什么非模态打开一闪就找不到了呀,再点打开就出错,另外什么时候用非模态?我怎么感觉非模态很不好用呀?

解决方案 »

  1.   

    Show在显示非模态窗体后继续执行后面的代码frmadvinsert.Show;  之后你又 frmadvinsert.free;
    所以窗体释放了解决方法:
      去掉 frmadvinsert.free在frmadvinsert窗体的OnClose事件里写:
     Action:= caFree;
      

  2.   

    以非模态显示窗口不能立即Free,如果每次都要动态建立,可响应OnClose事件,将Action设置为caFree就释放了,另外,不能Assigned来判断窗口是否存在,因为Free后,Frmadvinsert并不是nil。
      

  3.   

    你可能没看懂try/finally.
    finally后的Frmadvinsert.free;是一定执行的
    如果是Frmadvinsert.ShowMoadl  ; 那么等frmadvinsert.close 后再来执行finally后的Frmadvinsert.free;
      

  4.   

    Frmadvinsert.Show  ; 改 Frmadvinsert.ShowMoadl  吧 就不会消失了
    楼上 几位都说了!~~
      

  5.   

    是左下角了,哥们,我是想让它都到MID那样的感觉,有没有方便一点的方法?就是我现在已经做成了不想改成MDI模式窗体了
      

  6.   

    如果用非Modal 如上所说把 Frmadvinsert.free; 去掉   在OnClose中写Action:=caFree;
    同时要把Framavinsert:=nil; 要不然你在Assigned(Frmadvinsert)一直为True,因为第一次Create之后Framavinsert就不为Nil了,Free之后也一样.除非赋值为nil
      

  7.   

    不是非用MODAL,是能不能录单的同时把窗口最小化并开别的窗口,然后两个窗口能切换,现在的关键是电小化就被主窗体档住了
      

  8.   

    ls,也可以。
    但是另外一个 MDIChild ,而不是 MDIForm,否则的话,没有了 client 你的 MDI 打开就看不见了。