最近在做系统,遇到了个问题,就是在DELPHI主窗体中调用几个子窗体A B C,在程序开始运行的时候,为什么有的子窗体的假如A的OnCreate事件就被调用的,而BC的又不会,需要等到程序要显示它们的时候才会调用OnCreate?

解决方案 »

  1.   

    Delphi菜单:Project-Forms,看A、B、C是否不在自动创建的列里?
    需要时再动态创建窗口frmA:=TfrmA.Create(Application);
    frmA.ShowModal;
    FreeAndNil(frmA);
    ...
      

  2.   

    如楼上 就在 Project-Forms里边查看是不是自动创建
      

  3.   

    看看你的工程中你的窗体是不是在Auto-create forms中移到available forms 中去。
      

  4.   


    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.frmA:=TfrmA.Create(Application);
    frmA.ShowModal;
    FreeAndNil(frmA);
    上面2种方式是不同的,估计A使用的是第一种方式
    BC使用的是第二种
      

  5.   

    #4楼 正解。每个Delphi项目都有一个主程序(*.dpr),其内容形如:program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      ......................................
      ......................................
      Application.Run;
    end.其中,就有窗体创建的代码。窗体创建后,就可以调用show方法来显示;没有创建的窗体则不能直接show。如果在主程序将比如:  Application.CreateForm(TForm2, Form2); 移去,则以后在显示Form2前,就必须自己写代码来创建窗体(form2:=TForm2.Create(nil) )。创建窗体时,就会触发 OnCreate事件。