bonjour, comment puis je svp fermer toutes les win forms ouvertes sans connaitres leur nombre sachant que je connais uniquement le nom du winforms, ce dernier s'ouvre plusieurs fois, so je veux fermer toutes les instances a la fois
bonjour, comment puis je svp fermer toutes les win forms ouvertes sans connaitres leur nombre sachant que je connais uniquement le nom du winforms, ce dernier s'ouvre plusieurs fois, so je veux fermer toutes les instances a la fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part foreach (form frm in system.windows.application.openforms) { if (frm.name == "le nom que je cherche") frm.dispose(); }
Bonjour, merci pour la reponse, il me m'affiche une erreur :
Rappel :La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 foreach (Form frm in System.Windows.Forms.Application.OpenForms) if (frm.Name == "gridStatut") frm.Dispose();
oh, c'est un peu difficile pour moi ca, peux tu stp m'expliquer d'avantage .?
ToList est dans le framework 3 ou 3.5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach (Form frm in System.Windows.Forms.Application.OpenForms.ToList) if (frm.Name == "gridStatut") frm.Dispose();
Bonjour,
Pol63, j'ai l'impression que ça revient au même, il aura toujours la même erreur à l’exécution, dans le sens où la nouvelle liste sera modifiée aussi.
Dans ce cas là, il faut faire un bon vieux for...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(int i = 0;i<System.Windows.Forms.Application.OpenForms.Count;i++) { if (System.Windows.Forms.Application.OpenForms[i].Name == "gridStatut") { System.Windows.Forms.Application.OpenForms[i].Close(); System.Windows.Forms.Application.OpenForms[i].Dispose(); } }
non
ToList créé une nouvelle collection, et copie les éléments de la collection de base dans la nouvelle (il n'y a pas de synchronistion, c'est un "snapshot")
le for each est donc sur une autre collection que openforms
fermer une fenetre fait qu'elle est retirée de openforms (mécanisme interne du framework)
si par contre le form était retiré d'une collection qui n'a rien à voir ca serait grave![]()
je ne trouve pas pas le ToList dans openforms
Et que dois je faire j'ai beacoup de fenetre qui s'ouvre en meme temps
je t'ai posté un morceau de code plus haut qui fonctionne![]()
celui que tu m'a donné donne :
je vous explique mon probleme :L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection
j'ai une interface, je peux cocher plusieurs case, chaque coche me donne une fenetre, si je coche 5 j'aurai 5 fenetre plus la fenetre mere ou ils y a les cases, quand je valide la premiere interface fillette, (il me reste 4 + la mere), celle la dois fermer et ouvrir une nouvelle fenetre mere et fermer l'ancienne pour que la fenetre mere puisse se mettre a jour
Oui c'est normale que ca te donne cette erreur, il faut itérer à l'inverse...
ça ne devrait plus te faire d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(int i = System.Windows.Forms.Application.OpenForms.Count-1;i>0;i--) { if (System.Windows.Forms.Application.OpenForms[i].Name == "gridStatut") { System.Windows.Forms.Application.OpenForms[i].Close(); System.Windows.Forms.Application.OpenForms[i].Dispose(); } }
C'est toujours la meme erreur
maintenant bon sauf qu'il me ferme toutes le fenetres meme cqui ne porte pas le nom gridstatutL'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre : index
maintenant il faut apprendre à débugger![]()
parfois il me donne l'erreur que j'ai decrite en haut
Edit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 if (isn != 0 && isnd != 0) { for (int i = System.Windows.Forms.Application.OpenForms.Count - 1; i > 0; i--) { if (System.Windows.Forms.Application.OpenForms[i].Name == "gridStatut") { System.Windows.Forms.Application.OpenForms[i].Close(); System.Windows.Forms.Application.OpenForms[i].Dispose(); } } gridStatut gs = new gridStatut(m_agrSelected, m_anSelected); gs.Show(); this.Hide(); }
J'ai enlevé la ligne de dispose il me donne plus d'erreur
Partager