我正在使用此代码。在D2007。
FOR I := 0 to ComponentCount -1 do Begin
if Components[I] IS TPanel then
TPanel(Components[I]).Color := clWhite;
End;
我只需要具有相同父级和/或相同类型的那些。
怎么可能?
由于
哦!对不起......
所以我需要能够尽可能快地迭代我的表单组件,好吗?
上面的示例通过了很多组件。对吗?
我可以做Parent.ComponentCount
,但这只能解决一小部分问题。
有没有办法只获得某些组件,如TPanels或Tlabels所需的东西?
这个人更清楚了吗?
由于
答案 0 :(得分:4)
对表单的Components[]
属性进行迭代并使用is
运算符听起来并不像是性能瓶颈。我想如果你的表单有大量的组件,那么性能可能是一个问题。但这将是一个相当不寻常的情况。
也许最好使用父/子关系而不是终身关系。这是使用Controls[]
或WinControls[]
属性。
但是,如果性能确实存在问题,那么请安排您只迭代一次。将该迭代的结果存储在容器中,例如动态数组或列表,然后使用该容器。
答案 1 :(得分:0)
我将在这里进行猜测并建议在创建面板并使用控件填充每个面板时,构建一个TList<TControl>
(或其他可能更合适的基类,如WinControl或TComponent并添加您想要稍后处理的控件。然后在面板的.Tag
属性中保存对该列表的引用。
这样,每个列表都会完全包含您想要解决的组件,并且您不必浪费任何代码来筛选不需要的组件。
我可以建议一种使用非Delphi库轻松处理它的方法,但是这里的人不相信那些东西是为SO的用户服务的,所以你必须去其他地方寻求这样的建议。