2011-10-31 23 views
5

Delphi 2010'da, herhangi bir endekslenmiş özellikte (örneğin, TPageControl Sayfaları gibi) yineleme yolu var mıdır?Delphi 2010'da dizinlenmiş özellik üzerinden yineleme

+1

@TLame 'ActivePageIndex' dizinlenmiş bir özellik değil. –

+0

Yorumunuzu anlamadım, bu arada oldukça saldırgan ... ActivePageIndex hakkında bir şey söylemedim, nerede gördüğünüzü bilmiyorum. Sayfalar dedim. –

+0

Silinen yorumlara atıfta bulunduğumuzu kabul ediyorum –

cevap

1

Hayır, bu standart model yok gibi, mümkün değildir Bazı sınıfların sayımcıları niçin vardır: bu, onu nasıl sıralayacağını açıklayan bir kalıptır.

  • çoğu kez endeksi tamsayı
  • çoğu kez endeksi söyleyen bir özellik Count veya Uzunluk yoktur sıfır
  • en kez çarpar:

    Ne ancak yapabileceğiniz en iyi tahmindir son değeri

Son olarak, "retrofit" TPageControl with a GetEnumertor using class helpers (ya da alttaki tür bir kayıt ise yardımcıları kaydedin) mümkündür.

+0

İnternette araştırırken yazılarınızı (iyi şeyler) görüyordum, bunun için bir cevap bulmaya çalışıyorum :) Benim durumumda, farklı bileşenlerin yarım düzine indeksli özellikleri var . Sadece "Başlık" özelliği almak için onların üzerinden geçiyorum. Yani, şu anda yarım düzine neredeyse özdeş döngülerim var ve bundan hoşlanmıyorum. GetEnumerator şey güzel olsa da, bu kadar küçük bir sorun için çok fazla kod. –

+1

Bu döngüleri bazı genel kodlara ayırmaktan, ardından özdeş olmayan kodu içeren bir anonim yöntem iletmekten ne dersiniz? –

2

Sizi doğru anlıyorsam, özellik ve dizin değerleri hakkında hiçbir şey bilmeden bu özellikler üzerinden RTTI üzerinden yineleme yapmak istersiniz. Geçerli dizin değerleri bir tamsayı değerleri dizisi olmaması gerektiğinden, bu mümkün olamaz. Dizin indekslerine sahip veya index değeri olarak nesne referansları olan özellikler olabilir. Ve RTTI’da, bir iterasyon için kullanılabilecek geçerli indeks değerlerini sorgulamak için bir mekanizma yoktur.

That kullanmak endeksinin başlangıç ​​ve bitiş değerlerini belirten indeks türünü belirtir: