Как скопировать выбранный элемент ListBox1 в список ListBox2 с тем же индексом?

У меня есть 2 списка в форме Windows и 2 кнопки в середине этих полей. один показывает направо другой показывает налево. что я хочу сделать, так это когда я выбираю некоторые элементы, скажем, в списке1 и нажимаю правую кнопку отображения, я хочу скопировать элементы, которые я выбрал в списке1, в список 2 с теми же индексами, где я выбрал их в 1. Я могу сделать это, однако я не могу скопировать пустые строки. Вот как выглядят мои списки (я добавил числа, чтобы легко отслеживать строки здесь).

    ListBox1                Listbox2

1.  u                       a
2.
3.  l                       c
4.                          b
5.  m                       e
6.                          f
7.  n      >>(right button)          
8.                          c
9.  z      <<(left button)  t
10.                         q
11. s                         
12.                        
13. g                       b

теперь в этих полях, если я выберу любой элемент с текстом на нем и нажму кнопку, он скопирует элементы в другой список. но если я выберу любую строку без текста, любую пустую строку и нажму кнопку, это ничего не изменит. это не сделает другой элемент коробки пустым. вот код, как я копирую строки.

private void button4_Click(object sender, EventArgs e)
{

    List<int> selectedItemIndexes = new List<int>();
    foreach (string o in listBox1.SelectedItems)
        selectedItemIndexes.Add(listBox1.Items.IndexOf(o));

    for (int i = 0; i < selectedItemIndexes.Count; i++)
    {
        listBox2.Items[selectedItemIndexes[i]] =  listBox1.Items[selectedItemIndexes[i]];
    }

    selectedItemIndexes.Clear();


}

private void button3_Click(object sender, EventArgs e)
{
    List<int> selectedItemIndexes = new List<int>();
    foreach (object o in listBox2.SelectedItems)
        selectedItemIndexes.Add(listBox2.Items.IndexOf(o));

    for (int i = 0; i < selectedItemIndexes.Count; i++)
    {
        listBox1.Items[selectedItemIndexes[i]] = listBox2.Items[selectedItemIndexes[i]];
    }

    selectedItemIndexes.Clear();
}

как я могу также скопировать пустые строки?


person user1767833    schedule 17.01.2013    source источник
comment
Вы можете использовать SelectedIndices msdn.microsoft. com/en-us/library/ вместо SelectedItems...   -  person craig1231    schedule 17.01.2013
comment
Большое спасибо за этот ответ, сэр, он волшебным образом все исправил! Спасибо.   -  person user1767833    schedule 17.01.2013


Ответы (1)


Это потому, что в следующей строке

foreach (строка o в listBox1.SelectedItems) selectedItemIndexes.Add(listBox1.Items.IndexOf(o));

Вы получите пустую строку, и она всегда будет возвращать первый индекс пустой строки.

Решение состоит в том, чтобы использовать selectedIndices следующим образом:

     foreach (int selectedItemInd in listBox1.SelectedIndices)
        {
            selectedItemIndexes.Add(selectedItemInd);
        }
person peanut    schedule 17.01.2013