Döngüyle destroy olayında bir sorun ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Döngüyle destroy olayında bir sorun ?

Mesaj gönderen salvation »

Merhaba;

bir formda ki tag'i 99 olan edit leri yok etmek istiyorum ama bir sorunla karşı karşıyayım. Kodlarım şu şekilde:

Kod: Tümünü seç

  for i := 0 to self.ControlCount - 1 do
    if (self.Controls[i] is TEdit) and (self.Controls[i].Tag = 99)then
      self.Controls[i].Destroy;
Fakat bir kaç tanesi yokettikten sonra "List Index Out Of Bounds(4)" gibi hatalar alıyorum. Sanırım nesneleri sildiğim için sıralamada değişiklikler oluyor.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,

for döngüsü yerine while döngüsü kullan ama bir bileşeni sildiğin zaman döngü değerini arttırma, sadece silmediğin zaman arttır. o zaman sınırlar dışına çıkmazsın.

Kolay gelsin
gorecelik
Üye
Mesajlar: 23
Kayıt: 27 Nis 2005 02:59
Konum: İstanbul
İletişim:

Re: Döngüyle destroy olayında bir sorun ?

Mesaj gönderen gorecelik »

salvation yazdı: for i := 0 to self.ControlCount - 1 do
if (self.Controls is TEdit) and (self.Controls.Tag = 99)then
self.Controls.Destroy;

merhaba kardeş işlemin doğru ama dikkat etmen gereken nokta componentcount toplam componentin sayısını alır ama buralar doğru fakat dikkat et componentin birini sildiğin zaman componentcount 1 eksilir for döngün ise hala eski değere göre dönüyor doğal olarak kalan değerleri bulamıyor for döngünü tersten yaparsan sorun çözülür

Kod: Tümünü seç

for i := self.ControlCount - 1 downto 0 do 
    if (self.Controls[i] is TEdit) and (self.Controls[i].Tag = 99)then 
      self.Controls[i].Destroy;
gibi
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Destroy kullanmayıın. Free kullanııın.
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Mesaj gönderen salvation »

evet anlattığınız şekilde hallettim, çok teşekkürler.
Cevapla