0

次のように、TComponent を期待するコンストラクターに nil を渡すと、例外 (EIntfCasterror キャストはサポートされていません) をスローするコードに遭遇しました。

obj := SomeClass.Create(nil);

これが入っているユニットにはフォームが含まれておらず、TForm でさえ、コンストラクターを呼び出すときに TComponent を渡す必要があります。何かが存在する場合、またはnilを受け入れるようにする方法がある場合、nilの代わりに何を渡す必要がありますか。

ありがとうございました。

また、これが含まれているメソッドを呼び出すソースコードがないか、アクセスできるフォームを渡すだけです。

編集: コード例を修正しました。

EDIT2:最初に書いたときに2番目の脳のおならがあったため、コード例を修正しました。

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 に答える