Sıkıntım yetkilendirme formum ile ilgili ilk başlar aşağıdaki kod bloğum çok güzel işimi görüyordu. Fakat yetkilendirme formu genişleyip bileşen sayısı çoğaldıkça.. Yavaşlık hatta kitlenmeler yaşanmaya başladı. Bende tüm formun Componenetcount değeri kadar değilde aktif sekmenin componenet count değeri kadar döngü kurayım dedim.. Fakat <Tpagecontrol>.ActivePage.componentcount komutu sürekli olarak 0 dönüyor.
VAR
i : integer;
begin
try
case (SENDER AS TbsSkinCheckRadioBox).Checked of
True :
begin
for I := 0 to Self.ComponentCount - 1 do
begin
if (Self.Components[i].Tag = TAGI) and (Self.Components[i].ClassType = TbsSkinCheckRadioBox) then
begin
(Self.Components[i] as TbsSkinCheckRadioBox).Checked := True;
end;
Application.ProcessMessages;
end;
end;
FALSE :
Begin
for I := 0 to Self.ComponentCount - 1 do
begin
if (Self.Components[i].Tag = TAGI) and (Self.Components[i].ClassType = TbsSkinCheckRadioBox) then
begin
(Self.Components[i] as TbsSkinCheckRadioBox).Checked := False;
end;
Application.ProcessMessages;
end;
End;
end;
except on E: Exception do
Begin
Exit;
End;
end;
Merhaba , componentCount yerine ControlCount yada Controls.count kullanmalısınız.
Tabi "Components" koleksiyonu yerine Controls koleksiyonunu kullanmanız gerekir.
ControsCount olarak istediğim şekilde sonuç veriyor. Fakat Checkbox larım Groupbox içinde olduğu için checkboxları doğal olarak yok sayıyor Checkbox ları groupbox dan çıkararak tam sonuca ulaşabilirim fakat şuan için mevcut durumu çözmek daha eğlenceli olacağından bu şekilde devam edicem.
ControlsCount olarak istediğim şekilde sonuç veriyor. Fakat Checkbox larım Groupbox içinde olduğu için checkboxları doğal olarak yok sayıyor Checkbox ları groupbox dan çıkararak tam sonuca ulaşabilirim fakat şuan için mevcut durumu çözmek daha eğlenceli olacağından bu şekilde devam edicem.
ana döngünüz içinde Control ün TGroupBox olup olmadığını kontrol edip GroupBox ise ilgili bileşen için kendi içinde tekrar Controls koleksiyonu için döngü kurarak içindeki objelere ulaşabilirsiniz.
for i:=0 to self.Controls.Count-1 do
begin
if self.Controls[i] is TGroupBox then
begin
for k:=0 to TGroupBox(self.Controls[i]).Controls.Count-1 do
begin
//
end;
end;
end;