如何删除ListBox中的多个选定项

本文关键字:ListBox 何删除 删除 | 更新日期: 2023-09-27 18:25:58

我的windows窗体包含两个列表框。列表框1中包含一些项目,而列表框2为空。当我按下表单上的按钮时,从列表框1中选择的多个项目应该从列表框中删除并复制到列表框2中。

我在listbox1.SelectedItems上尝试了foreach循环,但它只从列表中删除了一个项目。

有人对此有解决方案或代码吗?

如何删除ListBox中的多个选定项

您可以在一个循环中完成所有操作。您应该在SelectedIndices上使用一个简单的for和向后循环:

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

您必须存储要在其他位置删除的值,然后从列表中删除它们,下面是示例代码:

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

我发现这段代码对我有效;项目";按delete键。我已经将ListViewBox用于原始输入存储。

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