L'eliminazione di IWTreeViewItems causa un'eccezione al rilascio del modulo
-
22-07-2019 - |
Domanda
Sul mio modulo ho un IWTreeView e due pulsanti. Un pulsante elimina alcuni IWTreeViewItems, l'altro rilascia il modulo:
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
IWTreeView1.Items[0].Subitems.Clear;
end;
procedure TIWForm1.IWButton2Click(Sender: TObject);
begin
Release;
end;
Il rilascio del modulo dopo l'eliminazione di IWTreeViewItems provoca un'eccezione:
Messaggio di errore generato dal applicazione: violazione di accesso all'indirizzo indirizzo 004E0D8A nel modulo 'TryTree.exe'. Lettura dell'indirizzo 00000000
Quando è attivo un altro modulo e l'applicazione non viene chiusa da questa versione del modulo, il messaggio di errore è:
Messaggio di errore generato dal applicazione: Elenca indice da limiti (-1)
Uso di IntraWeb 9.0.42 (a causa dei controlli TMS e Delphi 2006, poiché TMS non ha testato con 10.0.17 e delphi 2006).
Ho provato a distruggere IWTreeView1.ClearAll nella forma, il che non ha aiutato affatto.
Soluzione
Invece di SubItems.Clear ora uso
for i := IWTreeView1.Items[0].SubItems.Count-1 downto 0 do begin
TIWTreeViewItem(IWTreeView1.Items[0].SubItems[i]).Free;
end;
Funziona. Ancora aperto per soluzioni migliori, forse non coinvolgendo un ciclo attraverso tutti i sotto-elementi.