J'ai une option de menu de déconnexion dans mon application MDI. Une fois déconnecté, je souhaite fermer tous les formulaires ouverts. Actuellement, j'utilise l'extrait de code suivant pour y parvenir;pourquoi il ne lance pas "La collection a été modifiée, l'opération d'énumération peut ne pas s'exécuter" exception
For Each f As Form In My.Application.OpenForms
If f.Name = Me.Name Then
For Each child As Form In f.MdiChildren
child.Close()
Next
Else
f.Close()
End If
Next
Il fonctionne parfaitement dans mon environnement de test, même si je m'y attendais Pour chaque boucle jetteront « Collection a été modifiée, l'opération d'énumération ne peut pas exécuter » exception. puisque sur chaque enfant forment des appels Close(), la collection f.MdiChidren est modifiée, cela m'a beaucoup surpris. Quelqu'un peut-il me dire pourquoi il ne lance pas cette exception?
Cependant, il lance "Collection a été modifiée, l'opération d'énumération peut ne pas s'exécuter" dans un système client.
Il semble que la collection ne soit pas modifiée dans votre environnement de test. Le correctif pour l'environnement en direct serait d'ajouter d'abord des formulaires à une liste séparée et de boucler cette liste en les fermant. – JonAlb
MdiChildren renvoie un * tableau *, pas une collection. Vous n'êtes pas près de diagnostiquer le plantage de votre utilisateur. –
@JonAlb: Je ne pense pas que ce soit le cas, j'ai utilisé le point de rupture et vérifié que la taille de la collection enfant est réduite à chaque itération. – Riju