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

我的Windows窗体包含两个列表框。 Listbox1中包含一些项目,listbox2为空。 当我按下窗体上的按钮时,应从Listbox1中删除listbox1中的多个选定项并将其复制到Listbox2。

我尝试使用listbox1.SelectedItems上的foreach循环但它只从列表中删除了1个项目。

任何人都有解决方案或代码吗?

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

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

你必须存储你要在其他地方删除的值,然后从List中删除它们,这里是示例代码:

 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 arr = new List(); 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(); }