如何将选择的ListBox1项复制到相同索引的ListBox2列表中

本文关键字:索引 ListBox2 列表 复制 选择 ListBox1 | 更新日期: 2023-09-27 17:53:57

我有两个窗口窗体的列表框和两个按钮在这些框的中间。一个显示右边,另一个显示左边。我想做的是,当我在listbox1上选择了一些项目,然后点击右边的显示按钮,我想把我在listbox1上选择的项目复制到listbox2,在相同的索引上,我在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();
}

我如何也可以复制空行?

如何将选择的ListBox1项复制到相同索引的ListBox2列表中

这是因为在下一行

foreach (string 0 in listBox1.SelectedItems)selectedItemIndexes.Add (listBox1.Items.IndexOf (o));

你将得到一个空字符串,并且它将始终返回空字符串的第一个索引。

解决方案是像下面这样使用选定的索引:

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