C# Listboxes Копировать, а не Переместить
Мне нужно скопировать элементы из Listbox1 в Listbox2. Я использую этот фрагмент кода MOVE. Для отдельного элемента (btnAdd1) я просто закомментирую строку "Удалить", и все работает как положено. Однако для множественного выбора (btnAdd2), если я закомментирую строку "Удалить", программа зависнет... однако, если я оставлю ее, она будет работать. Есть идеи?
private void btnAdd1_Click_1(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == -1)
{
MessageBox.Show("Please Select an Item");
}
else
{
if (!listBox2.Items.Contains(listBox1.SelectedItem))
{
listBox2.Items.Add(listBox1.SelectedItem);
}
}
}
private void btnAdd2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == -1)
{
MessageBox.Show("Please Select Multiple Items");
}
else
{
while(listBox1.SelectedItems.Count != 0)
{
if (!listBox2.Items.Contains(listBox1.SelectedItem))
{
listBox2.Items.Add(listBox1.SelectedItems[0]);
// If this line is missing, the program hangs
listBox1.Items.Remove(listBox1.SelectedItems[0]);
}
}
}
}
2 ответа
Спасибо всем, я включил некоторые из этих подходов, и теперь все работает так, как я хочу. Вот окончательный код.
private void btnAdd2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == -1)
{
MessageBox.Show("Please Select Multiple Items");
}
else
{
if (!listBox2.Items.Contains(listBox1.SelectedItem))
{
foreach (var item in listBox1.SelectedItems)
{
listBox2.Items.Add(item);
}
}
}
}
У вас есть время цикла. условие цикла while будет истинным, если вы удалите эту строку. Ваш код должен быть таким:
foreach(var item in listbox1.SelectedItems)
if (!listbox2.items.contain(item)
listbox2.items.add(item);