声明:
procedure CreateMyForm(ComClass:TComponentClass; Form:TForm;) 
begin
  Application.CreateForm(ComClass,Form);
end;
...执行:
CreateMyForm(TFrmA,FrmA);   是可以创建窗体
FrmA 上有个 Label1
这时 FrmA.Label1.Caption := 'XXX' 就会出错
如果 Self.Label1.caption := 'XXX' 就可以通过
我想可能是声明的时候 TComponentClass 和 Tform 有误请大家帮忙!!!

解决方案 »

  1.   

    十分简单的问题
    这是因为你的FrmA没有指向真正的对象(还是nil的)。你看一看VCL的源码
    其中
    procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
    留意后一个参数的前面有 var
    所以如果你要正确调用的话那么改为
    procedure CreateMyForm(ComClass:TComponentClass; var Form:TForm;) 
    这样就可以正确了,
      

  2.   

    试了一下:楼主的方法好象没错有。至于: flexitime(我喜欢写程序) 的方法,编译通不过
    procedure CreateMyForm(ComClass:TComponentClass; var Form:TForm);
    begin
      Application.CreateForm(ComClass,Form);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      CreateMyForm(TForm2,form2);
      form2.Show;
      form2.Label1.Caption := 'test';
    end;
      

  3.   

    原来是这样:procedure CreateMyForm(ComClass:TComponentClass; var Form);
    begin
      Application.CreateForm(ComClass,Form);
    end;将 var Form:TForm 改成 Var Form 就要了  不要声明什么类型