Suppression dans une list<>...

Signaler
Messages postés
76
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 mai 2006
-
Messages postés
33
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
22 décembre 2009
-
Salut tt le monde!

Voilà, je voulais savoir, j'ai l'impression que quand je supprime un élément dans une list, il décalle avance tout ceux qui le suivait d'une position!!

Est ce vraiment ça ou je me trompe? dans ce cas c'est génial

4 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
c'est ca... il décale les index, c'est pour ca qu'il est conseillé de supprimer les items en commençant par la fin.


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
76
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 mai 2006

bah dans mon cas c'est super car quand je supprime une ligne de mon datagrid, les autres remonte et les index de ma grid correspondent avec les index de ma list!
Messages postés
131
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
23 septembre 2011

tu es sur que c'est fiable ??
sinon tu px aussi vider ta liste et la recharger (si pas trop de données), même si pas très élégant, au moins tu es sur que les index correspondent bien.
Messages postés
33
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
22 décembre 2009
1
bonjour à vous! je poste ici car ça a rapport avec ce qui est dit dans le topic même si ça remonte à assez loin...... si vous avez une réponse!!!!!
je me lance ^^

je crée dynamiquement des controls que je range dans une list. quand je supprime des éléments tout va bien le réindexage se passe nikel. Le problème c' est pour l affichage des controls dans ma form. vu qu'ils sont créé dynamiquement, j'incrémente une variable pour que les controls ne se superposent pas.... quand je supprime et que je fais un réaffichage..... ça ne fonctionne pas. Voici le code qui sera certainement plus clair que moi:

 private void button3_Click(object sender, EventArgs e)
        {
          Button suppr = new Button();
          Button edit = new Button();
          CheckBox ma_checkBox = new CheckBox();
          TextBox ma_textBox = new TextBox();
          Label titre = new Label();
          object mon_objet = new object();
            int i=0;// s'incrémente si le modulo est nul =>on est bien sur la fin d'une ligne //à afficher
         
         
          suppr = (Button)sender;
          int index = mes_elements.IndexOf(suppr);
          edit = (Button)mes_elements[(index - 2)];
          nowForm = (Form10)mes_elements[(index - 1)];
          ma_checkBox = (CheckBox)mes_elements[index - 3];
          ma_textBox = (TextBox)mes_elements[index - 4];
          titre = (Label)mes_elements[index - 5];
            MessageBox.Show(mes_elements.IndexOf(suppr).ToString());
          mes_elements.RemoveRange(mes_elements.IndexOf(suppr)-5,6);
            int indexfinal = mes_elements.Count ;
            MessageBox.Show(indexfinal.ToString());

          Controls.Remove(titre);
          Controls.Remove(edit);
          Controls.Remove(suppr);
          Controls.Remove(nowForm);
          Controls.Remove(ma_textBox);
          Controls.Remove(ma_checkBox);
          for (int j 1; j indexfinal; j++)
          {
              if (j % 6 == 0)
                  i = i++;

              switch (mes_elements[j].Name)
              {
                  case "button2": mes_elements[j].Location = new System.Drawing.Point(270, 204 + 20 * i); break;
                  case "button3": mes_elements[j].Location = new System.Drawing.Point(301, 204 + 20 * i); break;
                  case "titre": mes_elements[j].Location = new System.Drawing.Point(31, 102 + 20 * i); break;
                  case "textBox1": mes_elements[j].Location = new System.Drawing.Point(72, 98 + 20 * l); break;
                  case "checkBox1": mes_elements[j].Location = new System.Drawing.Point(274, 101 + 20 * l); break;
              }

              Controls.Add(mes_elements[j]);          

          }
          l = l - 1;

        }

Je comprends pas trop pourquoi ça refuse de réafficher correctement.
Si jamais vous avez une solution faites signe!!!!!