IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

fermer des winforms du meme nom a la fois


Sujet :

C#

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut fermer des winforms du meme nom 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

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    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(); }
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    Bonjour, merci pour la reponse, il me m'affiche une erreur :
    La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter.
    Rappel :
    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();

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    ah oui je suis bête ^^
    dispose sur le form le remove de openforms, et il est interdit de modifier une collection pendant le foreach
    il faut dupliquer openforms dans une autre collection, avec un openforms.tolist par exemple
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    oh, c'est un peu difficile pour moi ca, peux tu stp m'expliquer d'avantage .?

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    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();
    ToList est dans le framework 3 ou 3.5
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    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();
         }
    }

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    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.
    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
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    je ne trouve pas pas le ToList dans openforms

  10. #10
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Non ça n'existe pas

  11. #11
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    Et que dois je faire j'ai beacoup de fenetre qui s'ouvre en meme temps

  12. #12
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    je t'ai posté un morceau de code plus haut qui fonctionne

  13. #13
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    celui que tu m'a donné donne :
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection
    je vous explique mon probleme :
    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

  14. #14
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Oui c'est normale que ca te donne cette erreur, il faut itérer à l'inverse...
    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();
         }
    }
    ça ne devrait plus te faire d'erreur

  15. #15
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    C'est toujours la meme erreur
    L'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 bon sauf qu'il me ferme toutes le fenetres meme cqui ne porte pas le nom gridstatut

  16. #16
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    maintenant il faut apprendre à débugger

  17. #17
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    parfois il me donne l'erreur que j'ai decrite en haut

    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();
                        }
    Edit
    J'ai enlevé la ligne de dispose il me donne plus d'erreur

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2017, 09h53
  2. comment gérer des balises XML avec le meme nom
    Par banjaman dans le forum VBA Access
    Réponses: 0
    Dernier message: 27/05/2015, 10h18
  3. Réponses: 2
    Dernier message: 12/06/2011, 16h04
  4. [MySQL] Selectionner des champs spécifiques de 2 tables comportant les meme noms
    Par monlou dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2010, 17h29
  5. Jointure avec tables contenant des memes noms de champs
    Par guy2004 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/01/2010, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo