有没有办法更快地通过组件?

时间:2014-08-22 11:40:29

标签: delphi components

我正在使用此代码。在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所需的东西?

这个人更清楚了吗?

由于

2 个答案:

答案 0 :(得分:4)

对表单的Components[]属性进行迭代并使用is运算符听起来并不像是性能瓶颈。我想如果你的表单有大量的组件,那么性能可能是一个问题。但这将是一个相当不寻常的情况。

也许最好使用父/子关系而不是终身关系。这是使用Controls[]WinControls[]属性。

但是,如果性能确实存在问题,那么请安排您只迭代一次。将该迭代的结果存储在容器中,例如动态数组或列表,然后使用该容器。

答案 1 :(得分:0)

我将在这里进行猜测并建议在创建面板并使用控件填充每个面板时,构建一个TList<TControl>(或其他可能更合适的基类,如WinControl或TComponent并添加您想要稍后处理的控件。然后在面板的.Tag属性中保存对该列表的引用。

这样,每个列表都会完全包含您想要解决的组件,并且您不必浪费任何代码来筛选不需要的组件。

我可以建议一种使用非Delphi库轻松处理它的方法,但是这里的人不相信那些东西是为SO的用户服务的,所以你必须去其他地方寻求这样的建议。