如何将选定的ListBox1项复制到同一索引的ListBox2列表?

时间:2013-01-17 00:14:59

标签: c# listbox selecteditem selectedindex

我在Windows窗体上有2个列表框,在这些框的中间有2个按钮。一个显示正确的其他节目左。我想要做的是当我选择一些项目让我们在listbox1上说并点击右侧显示按钮时,我想将我在listbox1上选择的项目复制到我在其中选择它们的相同索引上的列表框2.我可以做这个,但我无法复制空行。这就是我的列表框的样子(我添加数字只是为了在这里轻松跟踪线条)。

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

我怎样才能复制空行?

1 个答案:

答案 0 :(得分:1)

这是因为在以下行

foreach(listBox1.SelectedItems中的字符串o)         selectedItemIndexes.Add(listBox1.Items.IndexOf(O));

您将获得空字符串,它将始终返回空字符串的第一个索引。

解决方案是使用selectedIndices如下:

     foreach (int selectedItemInd in listBox1.SelectedIndices)
        {
            selectedItemIndexes.Add(selectedItemInd);
        }