如:我有三个form, form1 , form2 , form3  form1已经是ShowModal的  在form1中 , form2.ShowModal ;  在form2中 , form3.ShowModal ;  当在from3中 , form1.ShowModal 时,因为form1已经ShowModal,故系统报错
“can not make a visible window modal”,这个问题怎么解决?1,如果已经ShowMOdal了,不让再次ShowMOdal,该怎么控制?2,如果想让它再次ShowModal出来,又该怎么做?

解决方案 »

  1.   

    你的逻辑好乱,怎么能转着圈的ShowModal?
      

  2.   

    既然你想在窗体之间切换,那你为什么不用show()呢
      

  3.   

    还是把你的设计要求说清楚吧,要实现什么功能?
    只知道你要不停的showMOdal!
      

  4.   

    这种情况是有的,例如:一张底稿A,关联着两个日记A,B, 日记A关联着底稿A和底稿C,首先由主界面上打开底稿A,再在底稿A上打开日记A , 接着在日记A上打开底稿C ,就出现这种情况了。(所有打开都是ShowModal的)。
      

  5.   

    相当于 主Form --> 底稿Form --> 日记Form --> 底稿Form
      

  6.   

    在from3中 f : tform1;f := tform1.create(application);
    f.showmodal;
      

  7.   

    form1.show,它就会跑到前面来或SetActiveWindow(form1.handle)
      

  8.   

    我现在想如果已经ShowModal了,就不让再次调用了,该怎么控制,由什么属性知道,要调用的Form已经ShowModal了?
      

  9.   

    你想做成什么样儿,目的是什么我不知道不过,我感觉如果你的窗体不是运行时创建的,而且是第一次创建的话没必要用 ShowModal如果你只不过是想让这些窗体循环的放在最前面的话,
    可以在窗体都显示出来的情况下用BringtoFront。但是如果你不能确定某一个窗体是什么状态你可以直接用 Show ,也就是说不管它是正在显示还是被隐藏,或者是一个子窗体正处于Close状态都可以显示出来。
      

  10.   

    showmodal只会有一个实例,不用控制异常的原因:
    form3.visible := false ;
    试试
      

  11.   

    就是form3.visible  :=  false  ;  这个,谢谢,搞定