Как удалить несколько выбранных элементов в ListBox?

моя форма windows содержит два списка. Listbox1 содержит некоторые элементы в нем, а listbox2 пуст. Когда я нажимаю кнопку в форме, несколько выбранных элементов из listbox1 должны быть удалены из Listbox1 и скопированы в Listbox2.

Я пробовал с циклом foreach на listbox1.SelectedItems, но он удаляет только 1 элемент из списка.

У кого-нибудь есть решение или код для этого?

6 ответов


вы можете сделать все в одном цикле. Вы должны использовать простой for и цикл назад на SelectedIndices:

private void button1_Click(object sender, EventArgs e) 
{ 
    for(int x = listBox1.SelectedIndices.Count - 1; x>= 0; x--)
    { 
        int idx = listBox1.SelectedIndices[x];
        listBox2.Items.Add(listBox1.Items[idx]); 
        listBox1.Items.RemoveAt(idx);
    } 
} 

вы должны сохранить значения, которые хотите удалить в другом palce, а затем удалить их из списка, вот пример кода:

private void button1_Click(object sender, EventArgs e)
{
    ArrayList tmpArr = new ArrayList();
    foreach (object obj in listBox1.SelectedItems)
    {
        listBox2.Items.Add(obj);
        tmpArr.Add(obj);
    }
    foreach (object obj in tmpArr.ToArray())
    {
        listBox1.Items.Remove(obj);
    }
}

Я сделал это, используя метод CopyTo для копирования элементов в массив длины количества выбранных элементов, а затем зациклился вокруг этого массива, удаляя каждый соответствующий элемент из ListBox1.

 private void button1_Click(object sender, EventArgs e)
 {
     object[] itemsToRemove = new object[listBox1.SelectedItems.Count];
     listBox1.SelectedItems.CopyTo(itemsToRemove, 0);

     foreach (object item in itemsToRemove)
     {
         listBox1.Items.Remove(item);
         listBox2.Items.Add(item);
     }
 }

для VS2005 я пользователь что-то подобное, как я не мог использовать .selectedIndices

  for (int i = ListBox1.Items.Count - 1; i >= 0; i--)
        {
                if (ListBox1.Items[i].Selected)
                {
                    ListBox2.Items.Add(ListBox1.Items[i]);
                    ListBox1.Items.Remove(ListBox1.Items[i]);
                }

        }

 for (int x = listBox1.SelectedIndices.Count - 1; x >= 0; x--)
        {
            int var = listBox1.SelectedIndices[x];
            listBox1.Items.RemoveAt(var);

        }

Свои Работы.


Это мой метод:

 List<String> arr = new List<string>();
    private void btnAdd_Click(object sender, EventArgs e)
    {
        arr.Add(txtItem.Text);
        lstItem.DataSource = arr.ToArray();
        txtItem.Focus();
    }
//When i delete
    private void btnRemove_Click(object sender, EventArgs e)
    {

        foreach (string item in lstItem.SelectedItems)
        {
            arr.Remove(item);
        }
        lstItem.DataSource = arr.ToArray();

     }