0

当将 nil 传递给期望 TComponent 的构造函数时,我遇到了一些引发异常(不支持 EIntfCasterror Cast)的代码,如下所示:

obj := SomeClass.Create(nil);

它所在的单元不包含表单,甚至 TForm 也需要在调用其构造函数时将 TComponent 传递给它。如果存在任何东西,或者有办法让它接受零,我应该通过什么来代替零。

谢谢你。

另外,我没有调用这个方法的源代码,或者我只是让它传递它可以访问的表单。

编辑:修复了代码示例。

EDIT2:修复了代码示例,因为我第一次写它时有第二个脑子放屁。

EDIT3:我也没有构造函数的代码。

4

1 回答 1

2

EIntfCastError与构造函数中传递的 Owner 无关。这是因为您尝试将接口转换为您认为它支持的另一个接口,而实际上它并不支持它。

MyNewInterface := MyInterface as IADifferentInterface;

即使在创建 TForm 时,您也永远不需要传递 Owner。以下代码是完全合法的:

var
  MyForm: TForm1;
begin
  MyForm := TForm1.Create(nil);
  try
    MyForm.ShowModal;
  finally
    MyForm.Free;
  end
end;

这也是如此(虽然它很愚蠢 - 但它说明了这一点):

implementation

var
  Button: TButton;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button := TButton.Create(nil);
  Button.Parent := Form1;
  Button.Left := 10;
  Button.Top := 10;
  Button.Caption := 'Button';
  Button.Name := 'MyDumbButton';
  Button.OnClick := TheButtonClick;
end;

procedure TForm1.TheButtonClick(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Name + ' clicked');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Button.Free;
end;
于 2011-03-24T14:09:43.620 回答