0

我创建了这样的新表单实例:

var
  ClassToUse: TFormClass;

begin  
  ClassToUse := TfrmMyForm; //CREATED AT DESIGN TIME
.
.
  NewForm := ClassTouse.Create(NewTab); //NewTab is an instance of a tab
.
end;

上面的代码工作正常。

但现在我想将表单作为字符串发送到创建该表单的过程。因此,我将代码更改为以下内容:

我创建了这样的新表单实例:

var
  ClassToUse: TFormClass;

begin  
  ClassToUse := GetClass(pFormName); //pFormName is a string -- ERROR IS HERE!!
.
.
  NewForm := ClassTouse.Create(NewTab);  
.
end;

这给出了以下错误:

Error: Incompatible types: got "TPersistentClass" expected "TFormClass"

也许我在错误的页面上......实现这个的正确方法是什么?

谢谢!

4

1 回答 1

3

GetClass函数TPersistentClass返回。您不能将其中一个分配给TFormClass. 出于完全相同的原因,您不能将引用分配给TPersistent引用TForm

您可以将代码更改为:

var
  RegisteredClass: TPersistentClass;
begin  
  RegisteredClass := GetClass(pFormName);
  if RegisteredClass=nil then
    raise ESomeException.Create(...);
  if not RegisteredClass.InheritsFrom(TForm) then
    raise ESomeException.Create(...);
  NewForm := TFormClass(RegisteredClass).Create(NewTab);  
end;
于 2012-12-18T12:42:01.070 回答