2 votes

C# - Comment déplacer plusieurs éléments vers le haut et vers le bas dans une boîte à liste (Windows Form)

J'ai une ListBox dans une application Windows Form. Je peux facilement déplacer des éléments individuels vers le haut et vers le bas dans la boîte de liste avec ce script :

int newIndex = inputFiles.SelectedIndex + direction;

if (newIndex < 0)
   newIndex = inputFiles.Items.Count-1;

if (newIndex >= inputFiles.Items.Count)
    newIndex = 0;

object selected = inputFiles.SelectedItem;

inputFiles.Items.Remove(selected);
inputFiles.Items.Insert(newIndex, selected);
inputFiles.SetSelected(newIndex, true);

Comment déplacer plusieurs éléments sélectionnés ? Je vous remercie tous !

1voto

Byrd Points 41

Je ne pense pas qu'il existe une méthode spécifique pour déplacer une liste dans une boîte à liste. Il existe cependant une méthode AddRange() qui place tous les éléments au bas de la liste.

Vous pouvez essayer de créer votre propre InsertRange() comme suit.

List<object> toInsert = new List<object>();
toInsert.Add(selected);

InsertRange(int startIndex){
     foreach(object o in toInsert){
          inputFiles.Items.Insert(startIndex, o);
          startIndex++;
     }
}

Il se peut que cela ne fonctionne pas exactement, mais je pense que c'est ce que vous demandez.

1voto

LarsTech Points 43510

Si vous copiez les index sélectionnés dans un tableau, vous pouvez parcourir les éléments en boucle et mettre à jour les index de manière appropriée :

private void btnDown_Click(object sender, EventArgs e) {
  listBox1.BeginUpdate();
  int[] indexes = listBox1.SelectedIndices.Cast<int>().ToArray();
  if (indexes.Length > 0 && indexes[indexes.Length - 1] < listBox1.Items.Count - 1) {
    for (int i = listBox1.Items.Count - 1; i > -1; --i) {
      if (indexes.Contains(i)) {
        object moveItem = listBox1.Items[i];
        listBox1.Items.Remove(moveItem);
        listBox1.Items.Insert(i + 1, moveItem);
        listBox1.SetSelected(i + 1, true);
      }
    }
  }
  listBox1.EndUpdate();
}

private void btnUp_Click(object sender, EventArgs e) {
  listBox1.BeginUpdate();
  int[] indexes = listBox1.SelectedIndices.Cast<int>().ToArray();
  if (indexes.Length > 0 && indexes[0] > 0) {
    for (int i = 0; i < listBox1.Items.Count; ++i) {
      if (indexes.Contains(i)) {
        object moveItem = listBox1.Items[i];
        listBox1.Items.Remove(moveItem);
        listBox1.Items.Insert(i - 1, moveItem);
        listBox1.SetSelected(i - 1, true);
      }
    }
  }
  listBox1.EndUpdate();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X