La suppression d'IWTreeViewItems provoque une exception lors de la libération du formulaire
-
22-07-2019 - |
Question
Sur mon formulaire, j'ai un IWTreeView et deux boutons. Un bouton supprime certains IWTreeViewItems, l’autre libère le formulaire:
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
IWTreeView1.Items[0].Subitems.Clear;
end;
procedure TIWForm1.IWButton2Click(Sender: TObject);
begin
Release;
end;
La libération du formulaire après la suppression de IWTreeViewItems provoque une exception:
Message d'erreur généré par le application: violation d'accès à adresse 004E0D8A dans le module 'TryTree.exe'. Lecture d'adresse 00000000
Lorsqu'un autre formulaire est actif et que l'application n'est pas terminée par cette version, le message d'erreur est le suivant:
Message d'erreur généré par le application: index de liste sur bornes (-1)
Utilisation d'IntraWeb 9.0.42 (à cause des contrôles TMS et de Delphi 2006, ce dernier n'ayant pas été testé avec 10.0.17 et delphi 2006).
J'ai essayé de IWTreeView1.ClearAll sous la forme destroy, ce qui n'a pas aidé du tout.
La solution
Au lieu de SubItems.Clear, j'utilise maintenant
for i := IWTreeView1.Items[0].SubItems.Count-1 downto 0 do begin
TIWTreeViewItem(IWTreeView1.Items[0].SubItems[i]).Free;
end;
Cela fonctionne. Toujours ouvert pour de meilleures solutions, n'impliquant peut-être pas une boucle dans tous les sous-éléments.