Remettre à 0 un panel qui contient des Users Controls/Supprimer les UsersControl

Philmargera Messages postés 11 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 6 juillet 2016 - 25 août 2010 à 19:07
Philmargera Messages postés 11 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 6 juillet 2016 - 26 août 2010 à 06:17
Bonjour/Bonsoir,
voilà mon problème :
j'ai donc un panel qui contient plusieurs users controls, voici le code :

Au début, j'ai ceci :
static List listEspaces = new List();


quand je clique sur un des éléments de mon user control (qui est composé d'un label et d'une image) :
code=cs] PictureBox pb = (PictureBox)sender;
FPrincipale FP = new FPrincipale();
FP.supprimerComposantsPanneauPSHome(Convert.ToInt32(pb.Tag));/code

Quand j'affiche tous mes UserControl au début, tout fonctionne, mais ensuite j'aimerai les effacer pour en créer de nouveaux, mais là impossible, en mettant la listEspaces en static je peux effacer les UserControls, mais après la liste est inutilisable, voici le code que j'utilise :
Ici je crée mes UserControls : (tout ce passe comme je le voulais)
private void pSToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int i = 0;
            int x = 0;
            int y = 0;

            GestionDesPanneaux();
            panelPS.Visible = true;

            var espaces (from esp in this.dc.Espaces where esp.esp_esp null select esp).ToList();

            foreach (Espaces espace in espaces)
            {
                listEspaces.Add(new UCEspaces());
                listEspaces[i].AfficherTitre(espace.nom_esp, espace.id_esp);
                listEspaces[i].AfficherImage("..\\..\\Images\\Espaces\" + espace.image_esp);

                if (i % 8 == 0 && i > 0)
                {
                    x = 130;
                    y += 152;
                }
                else
                    x += 130;

                listEspaces[i].Location = new Point(x, y);
                panelPS.Controls.Add(listEspaces[i]);
                
                i++;
            }
        }


Ensuite lorsque je clique sur l'un des composants d'un userControl je passe ici : tout ce supprime, mais apparement pas comme cela devrait...
        public void supprimerComposantsPanneauPS(int id)
        {
            this.id_espace = id;
            int taille = listEspaces.Count();
            for (int i = 0; i < taille; i++)
            {
                this.panelPS.Controls.Remove(listEspaces[0]);
                listEspaces[0].Controls.Clear();
                listEspaces.Remove(listEspaces[0]);
            }
            afficherElementPS();
        }


        private void afficherElementPS()
        {
            int i = 0;
            int x = 0;
            int y = 0;

            var espaces (from esp in this.dc.Espaces where esp.esp_esp this.id_espace select esp).ToList();
            String nomEspace (from esp in this.dc.Espaces where esp.id_esp this.id_espace select esp.nom_esp).Single();

            listEspaces = new List();

            foreach (Espaces espace in espaces)
            {
                listEspaces.Add(new UCEspaces());
                listEspaces[i].AfficherTitre(espace.nom_esp, espace.id_esp);
                listEspaces[i].AfficherImage("..\\..\\Images\\Espaces\" + nomEspace + "\" + espace.image_esp);

                if (i % 8 == 0 && i > 0)
                {
                    x = 130;
                    y += 152;
                }
                else
                    x += 130;

                listEspaces[i].Location = new Point(x, y);
                panelPS.Controls.Add(listEspaces[i]);

                i++;
            }
        }


Je vous remercie d'avance pour votre aide, car sans ça, je peux pas avancer vu que je ne peux plus rien voir après :s

2 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
25 août 2010 à 22:16
Bonsoir

je n'ai pas analysé tout ton code, mais fdans ta boucle

    for (int i = 0; i < taille; i++)
    {
        this.panelPS.Controls.Remove(listEspaces[0]);
        listEspaces[0].Controls.Clear();
        listEspaces.Remove(listEspaces[0]);
    }


tu n'utilises pas la variable i, donc elle ne sert à rien.

ne serait-ce pas plutot
    for (int i = 0; i < taille; i++)
    {
        this.panelPS.Controls.Remove(listEspaces[i]);
        listEspaces[i].Controls.Clear();
        listEspaces.Remove(listEspaces[i]);
    }



Bob
C# is amazing, enjoy it!
0
Philmargera Messages postés 11 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 6 juillet 2016
26 août 2010 à 06:17
Cette partie là est juste, car si je met le i, il va m'indiquer une erreur comme quoi l'index était hors limite, vu qu'à chaque fois j'en efface un, la taille de la liste diminue donc, et donc à chaque fois l'élément 0 est différent, il m'efface donc bel et bien tous les éléments du panel.
0
Rejoignez-nous