谁能告诉我为什么第二次转换在 Delphi 7 中编译失败?
var
WebBrowser: TWebBrowser;
begin
WebBrowser := TWebBrowser.Create(Self);
TWinControl(WebBrowser).Parent := Self;
(WebBrowser as TWinControl).Parent := Self; // fail here
end
TWebBrowser 中的 Parent 是一个只读 IDispatch 属性,但为什么第一个转换看到 TWinControl 父属性正常,而第二个转换却没有?
谢谢
最佳答案
第一个转换不使用检查,它假定程序员是正确的并继续。 第二个 Actor 使用一些完整性检查。 (如果转换无效则引发异常)。 我认为在这种情况下,编译器会因为类似的命名属性而感到困惑。它甚至可能是一个过于热情的优化器。
至少,
var
wc : TWinControl;
begin
wc := (WebBrowser as TWinControl);
wc.Parent := Self;
end;
有效。所以有规避。
关于delphi - 将 TWebBrowser 转换为 TWinControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/316949/