Как удалить несколько выбранных элементов в 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();
}