sagar
sagar

Reputation: 1936

How to remove multiple selected items in ListBox?

My windows form contains two listboxes. Listbox1 contains some items in it and listbox2 is empty. When I press a button on the form, then multiple selected items from listbox1 should be removed from Listbox1 and copied to Listbox2.

I tried with foreach loop on listbox1.SelectedItems but it removes only 1 item from list.

Anyone has solution or code for this?

Upvotes: 8

Views: 33926

Answers (7)

NettyL
NettyL

Reputation: 1

I found this code worked for me. The aim was to delete multiple rows of "items" with the press of the delete key. I have used a ListViewBox for the original input storage.

    private void visitorsOnsiteListLB_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyData == Keys.Delete)
            {
               
                foreach (ListViewItem item in visitorsOnsiteListLB.SelectedItems)
                {
                    visitorsOnsiteListLB.Items.Remove(item);

                }
            }
         }

Upvotes: 0

Chhorm Ratana
Chhorm Ratana

Reputation: 1

This is my method:

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

     }

Upvotes: 0

Ch UmarJamil
Ch UmarJamil

Reputation: 307

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

        }

Its Works.

Upvotes: 0

Steve
Steve

Reputation: 216243

You could do all in a single loop. You should use a simple for and loop backwards on 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);
    } 
} 

Upvotes: 23

Standage
Standage

Reputation: 1517

For VS2005 I user something similar as I couldn't use .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]);
                }

        }

Upvotes: 0

mageets
mageets

Reputation: 91

I did this using using the CopyTo method to copy the items to an array the length of the count of selected items and then looped around that array removing each corresponding item from 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);
     }
 }

Upvotes: 3

MRM
MRM

Reputation: 435

you must store The values, you want to delete in other palce and then delete them from List,Here is sample code:

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

Upvotes: 3

Related Questions