Questa è probabilmente una domanda stupida, ma il mio cervello è appena cotto abbastanza Penso che userò una delle mie "linee di vita" per vedere se riesco a ottenere un po 'di aiuto dai miei amici in overflow. ;)Eliminazione di tutti i componenti di una determinata classe in un modulo (Delphi)
Ho bisogno di eliminare tutte le occorrenze di un particolare tipo di componente nel mio modulo principale (alcune di esse sono all'interno di pannelli o fogli di calcolo, ma tutte su e di proprietà dello stesso modulo). Ecco quello che ho adesso:
for i := 0 to frmMain.ComponentCount - 1 do
begin
if frmMain.Components[i] is TMyClass then frmMain.Components[i].Destroy;
end;
Il problema è (e sapevo che sarebbe stato prima che ho compilato esso) che, una volta distruggo la componente, lista dei componenti re-indici del modulo e finisco fuori dai limiti.
Qual è il modo migliore per risolvere questo problema? Ho pensato di aggiungere i componenti "trovati" a un array standalone, e poi passare attraverso quello dopo questo ciclo per eliminarli, che penso funzionerà .... ma è l'approccio migliore?
TIA
UPDATE:
Voi ragazzi roccia. Grazie. :)
Destroy è virtuale. Se l'oggetto è stato già distrutto, fallirebbe. Verifica gratis per vedere se ha un riferimento valido prima di chiamare Destroy. Non è probabile che ci sia un problema qui, ma una buona pratica in generale. –
In questo caso, è sicuro chiamare semplicemente Destroy.A causa del modo in cui VCL gestisce questo elenco, non è probabile che vi sia un riferimento non valido in tale elenco. Anche se ci fosse, Free non ti proteggerà perché si basa sull'istanza di essere nullo. –
Si noti inoltre che il ciclo passa da alto a zero, per garantire che tutti gli articoli siano considerati, altrimenti il ciclo può saltare gli elementi accanto a quello cancellato. Importante da non perdere. – mj2008