为什么firemonkey控件总是声称在iOS上有子控件?
我正在研究在面板内部动态创建控件(为什么firemonkey控件总是声称在iOS上有子控件?,ios,delphi,infinite-loop,firemonkey,delphi-xe8,Ios,Delphi,Infinite Loop,Firemonkey,Delphi Xe8,我正在研究在面板内部动态创建控件(TImageControl)(以及作为试用/出错的一部分,其他容器控件)。其中一部分,我有一段代码,首先清除旧图像: procedure TfrmImageView.Clear; begin while sbImages.ControlsCount > 0 do sbImages.Controls[0].DisposeOf; end; 这在Windows上非常有效。然而,当我在iPad上运行它时,它会陷入一个连续的循环,因为出于某种原因,co
TImageControl
)(以及作为试用/出错的一部分,其他容器控件)。其中一部分,我有一段代码,首先清除旧图像:
procedure TfrmImageView.Clear;
begin
while sbImages.ControlsCount > 0 do
sbImages.Controls[0].DisposeOf;
end;
这在Windows上非常有效。然而,当我在iPad上运行它时,它会陷入一个连续的循环,因为出于某种原因,controlScont
总是1。事实上,即使我从来没有在那里放过任何控件,这种情况也会发生
为什么此报告总是1个控件?PS-通过将引用存储在列表中来解决,但仍然很奇怪为什么它总是说只有一个控件。如果您使用
Panel1.Controls[0]查看该面板的第一个子控件的类名,则会发现ClassName代码>您将发现该控件的类名是TStyledPresentation,它是components样式系统工作所需的基本控件。事实上,如果您对其他FMX组件进行类似的检查,您将得到类似的结果。此外,您的代码也有潜在的危险,因为您正在将面板子控件类型转换为TImageControl,这是不好的。为什么?问问自己,如果在面板上放置其他组件,会发生什么情况。您可能试图使用错误的类接口访问该组件,这可能导致以错误的方式读取和写入数据,从而导致各种不可预见的后果。这样的bug可能很难追踪。@SilverWarior我将其命名为TImageControl
,仅用于解决问题的试验,因为当时我并不认为它们真的被摧毁了。本来就没有。它过去也是免费的。演员阵容很奇怪。处置是从托宾开始的。使用checked casts.PS-通过将引用存储在列表中来解决,但仍然很好奇为什么它总是说只有一个控件。如果您使用Panel1.Controls[0]查看该面板的第一个子控件的类名,则会发现ClassName代码>您将发现该控件的类名是TStyledPresentation,它是components样式系统工作所需的基本控件。事实上,如果您对其他FMX组件进行类似的检查,您将得到类似的结果。此外,您的代码也有潜在的危险,因为您正在将面板子控件类型转换为TImageControl,这是不好的。为什么?问问自己,如果在面板上放置其他组件,会发生什么情况。您可能试图使用错误的类接口访问该组件,这可能导致以错误的方式读取和写入数据,从而导致各种不可预见的后果。这样的bug可能很难追踪。@SilverWarior我将其命名为TImageControl
,仅用于解决问题的试验,因为当时我并不认为它们真的被摧毁了。本来就没有。它过去也是免费的。演员阵容很奇怪。处置是从托宾开始的。使用选中的类型转换。