2011-10-31 49 views
5

在Delphi 2010中,是否有一种方法可以遍历任何类型的索引属性(例如TPageControl的页面)?在Delphi 2010中通过索引属性进行迭代

+1

@TLame'ActivePageIndex'不是索引属性。 –

+0

我不明白你的评论,相当冒犯的方式...我没有说任何关于ActivePageIndex,我不知道你在哪里看到它。我说页面。 –

+0

我认为你指的是删除的评论 –

回答

1

不,这是不可能的,因为没有这个标准模式:

  • 指定索引类型
  • 指定索引的开始和结束值使用

这为什么某些类具有枚举数:它是告诉for ...在声明中如何列举它的模式。

什么但是你可以做的是最好的估计:

  • 次数最多的指数是整数
  • 次数最多的指数在零
  • 次数最多的启动有一个属性Count或长度告诉你如何获得最终值

最后,有可能"retrofit" TPageControl with a GetEnumertor using class helpers(或记录助手,如果基础类型是记录)。

+0

当我在网上搜索时,我确实看到了你的帖子(好东西),试图找到这个答案:)在我的情况下,我有不同组件的六个索引属性。我遍历它们只是为了得到一个“Caption”属性。所以,现在,我有六个几乎相同的循环,我不喜欢那样。尽管GetEnumerator很酷,但对于这样一个小问题来说代码太多了。 –

+1

如何将这些循环抽象为一些泛型代码,然后向它传递一个匿名方法,该方法包含非相同的代码? –

2

如果我正确理解你,你想通过RTTI遍历这些属性,而无需知道任何关于属性及其索引值。 因为有效索引值不能是一个整数值序列,所以这是不可能的。可能有字符串索引或对象引用作为索引值的属性。 RTTI中没有机制来查询可用于迭代的有效索引值。