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);
Другие вопросы по тегам