0

Windowsフォームに2つのリストボックスがあり、それらのボックスの中央に2つのボタンがあります。1つは右を示し、もう1つは左を示します。リストボックス1でいくつかのアイテムを選択し、右の表示ボタンをクリックすると、リストボックス1で選択したアイテムを、1で選択したのと同じインデックスのリストボックス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();
}

空の行もコピーするにはどうすればよいですか?

4

1 に答える 1

1

それは、次の行にあるためです

foreach (listBox1.SelectedItems の文字列 o) selectedItemIndexes.Add(listBox1.Items.IndexOf(o));

空の文字列が取得され、常に空の文字列の最初のインデックスが返されます。

解決策は、次のように selectedIndices を使用することです。

     foreach (int selectedItemInd in listBox1.SelectedIndices)
        {
            selectedItemIndexes.Add(selectedItemInd);
        }
于 2013-01-17T00:50:34.860 に答える