我的程序需要在创建完主窗体后立即创建子窗体,但因为某种原因,不想采用自动生成的方式,而是在主窗体的OnShow事件中加入创建子窗体代码,但提示“没有激活的MDI窗体”错误,怎么办?

解决方案 »

  1.   

    先注册相应的 MDIChild 窗体类 :initialization
         RegisterClass(TFrmMDIChild);使用时再 :  Application.CreateForm(TFrmMDIChild,MDIForm);
      MDIForm.Show;
      
      

  2.   

    你没有设置主窗体为mdi父窗体。
      

  3.   

    不是啊,如果选择自动生成,就没有这个问题或者如果做个按钮或菜单,用同样的语句生成子窗体,也没有这个问题。现在的问题是,在主窗体创建后,不需要用户点击任何东西,就立即创建子窗体,这时候出错。我估计原因是这时候主窗体本身还没有激活,但是主窗体又没有AfterActive事件,怎么办?
      

  4.   

    有没有能起到AfterActive作用的事件,或其他办法呢?
      

  5.   

    不能在mdi主窗体的show中创建子窗体 ,因为在show的过程中主窗体还没有完全建立,如果在主窗体显示后通过其他事件来触发创建子窗体就没有问题了。
      

  6.   

    我也知道是这个原因,难道要用个定时器来触发,这太愚蠢了点吧,不过实在不行也只有这个办法了,最好能捕捉到AfterShow.
      

  7.   

    谢了!我还有连接数据库等内容,并根据情况判断是否要打开子窗体,不知道在project中好不好实现,先用定时器吧,虽然愚蠢,倒很简单。