Как удалить несколько выбранных элементов в ListBox? - PullRequest
6 голосов
/ 28 февраля 2012

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

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

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

Ответы [ 6 ]

19 голосов
/ 29 февраля 2012

Вы можете сделать все в одном цикле.Вы должны использовать простой 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);
    } 
} 
2 голосов
/ 07 февраля 2014

Я сделал это, используя метод 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);
     }
 }
2 голосов
/ 28 февраля 2012

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

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);
    }
}
0 голосов
/ 13 июля 2018

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

 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();

     }
0 голосов
/ 23 апреля 2017
 for (int x = listBox1.SelectedIndices.Count - 1; x >= 0; x--)
        {
            int var = listBox1.SelectedIndices[x];
            listBox1.Items.RemoveAt(var);

        }

Его работы.

0 голосов
/ 06 марта 2014

Для 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]);
                }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...