【问题标题】:Is there a way to go through components faster?有没有办法更快地通过组件?
【发布时间】:2014-10-16 06:10:39
【问题描述】:

我正在使用此代码。在 2007 年。

FOR I := 0 to ComponentCount -1 do Begin
    if Components[I] IS TPanel then
        TPanel(Components[I]).Color := clWhite;
End;

我只需要具有相同父级和/或相同类型的那些。

这怎么可能?

谢谢

哦!!!对不起……

所以我需要能够尽可能快地遍历我的表单组件,好吗?

上面的示例涉及到许多组件。对吗?

我可以Parent.ComponentCount,但这只能解决一小部分。

有没有办法只获取一些必要的组件,例如 TPanels 或 Tlabels?

这更清楚吗?

谢谢

【问题讨论】:

    标签: delphi components


    【解决方案1】:

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

    也许使用父/子关系而不是生命周期关系会更好。那就是使用Controls[]WinControls[] 属性。

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

    【讨论】:

      【解决方案2】:

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

      这样每个列表都将包含您想要处理的确切组件,并且您不必浪费任何代码来筛选不需要的组件。

      我可以建议一种使用非 Delphi 库轻松处理它的方法,但这里的人们不相信这种事情对 SO 的用户有帮助,所以你必须去其他地方寻求这样的建议.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 2017-03-26
        • 2022-07-06
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多