如何在MDI窗体下面实现子窗体的showmodal的效果,因为如果调用子窗体的showmodal就会显示出错,这是什么原因???请高手帮忙解决!!多谢了!!!!

解决方案 »

  1.   

    因为如果调用普通子窗体的showmodal不会错的,showmodal的窗体不能是字窗体类型
      

  2.   

    MDI本来就是要求同时能显示多窗口,而用了showmodal只能显示一个窗口,那不是矛盾吗?
      

  3.   

    有事能行的话就不是MDI了
    就是SDI了
      

  4.   

    解决方案
    1.将子窗口(SubForm)FormStyle设置为fsNormal,并将Visable设置为False
    2.在Mdi窗口的事件中写如下代码:
    var
      SubForm: TSubForm;
    begin
      SubForm := TSubForm.Create(nil);
      SubForm.ShowModal;
    end;问题可以得到解决
    如果子窗口本身为MDIChild,创建后将FormStyle设置为fsNormal,应该可以解决问题,但我没有试过,只是理论上可行
      

  5.   

    无意间也碰到此问题,此问题是可以解决的,虽此帖已结账,还是想贴出来,希望能给让后来者提供参考。
      说明:FormStyle 为 MDIChild 对象窗口本身的确是不可ShowModal,所以我们需要在窗体创建之后作一些处理,步骤如下:
      1、设计时,设置窗体的 FormStyle=fsNormal,同时设置 Visible=FALSE。
      2、重载你的窗口的Create构造函数,并作一下处理。
      constructor Create(AOwner: TComponent; OwnerStyle: TFormStyle); reintroduce; virtual;  constructor TXXForm.Create(AOwner: TComponent; OwnerStyle: TFormStyle);
      begin
        inherited Create(self);
        FormStyle := OwnerStyle;
        Visible := OwnerStyle=fsMDIChild;
      end;  xxForm.Create(self,fsNormal)
      xxForm.ShowModal;
      xxForm.Free;  if xxForm=nil then xxForm.Create(self,fsMDIChild);
      xxForm.Show;