我遇到过一些代码,当它将nil传递给需要TComponent的构造函数时,会抛出异常(不支持EIntfCasterror强制转换),如下所示:
obj := SomeClass.Create(nil);它所在的单元不包含表单,甚至TForm在调用其构造函数时也需要向其传递TComponent。如果存在任何东西,我应该传递什么来代替nil,或者有什么方法可以让它接受nil。
谢谢。
而且,我没有调用这个方法的源代码,否则我只会让它传递它有权访问的表单。
编辑:修复代码示例。
EDIT2:修复了代码示例,因为当我第一次编写它时,我有了第二个想法。
EDIT3:我也没有构造函数的代码。
发布于 2011-03-24 22:09:44
EIntfCastError与传入构造函数的所有者无关。这是因为您试图将一个接口转换为您认为它支持的另一个接口,而它实际上并不支持它。
MyNewInterface := MyInterface as IADifferentInterface;您永远不会要求传入所有者,即使在创建TForm时也是如此。以下代码是完全合法的:
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;https://stackoverflow.com/questions/5419901
复制相似问题