Suppression dans une list<>...

Lucasd Messages postés 76 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 mai 2006 - 9 mars 2006 à 10:54
parlaciel Messages postés 33 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 22 décembre 2009 - 29 avril 2008 à 13:48
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
9 mars 2006 à 10:59
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#]
0
Lucasd Messages postés 76 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 mai 2006
9 mars 2006 à 11:54
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!
0
cs_zatt Messages postés 131 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 23 septembre 2011
9 mars 2006 à 22:12
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.
0
parlaciel Messages postés 33 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 22 décembre 2009 1
29 avril 2008 à 13:48
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!!!!!
0
Rejoignez-nous