0

2つのリストボックスがあり、アイテムを相互に移動するためのコントロールがあります。エントリをlistBox1からlistBox2に移動すると、listBox1の最初のエントリが自動的に選択されます。選択されたアイテムは、移動されたそのlistBoxに存在しないため、論理的な動作です。ただし、ユーザーが再選択し続ける必要があるため、ユーザーが連続するアイテムを追加したい場合、これは厄介です。

アイテムをlistBox1からlistBox2に移動するコード:

private void addSoftware()
{
     try
     {
         if (listBox1.Items.Count > 0)
         {
             listBox2.Items.Add(listBox1.SelectedItem.ToString());
             listBox1.Items.Remove(listBox1.SelectedItem);
         }
     }

     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }


     if (listBox1.Items.Count > 0)
         listBox1.SelectedIndex = 0;
     listBox2.SelectedIndex = listBox2.Items.Count - 1;
}

論理的には、listBox1のSelectedIndexを、[追加]ボタンをクリックする前と同じままにしておきたいと思います。実際には、listBox1で選択したアイテムを次のアイテムにします。したがって、ユーザーがアイテム4を移動した場合、それが理にかなっている場合、選択されたアイテムは新しいアイテム4(アイテム5でしたが現在は4)である必要があります。行をコメントアウトした

listBox1.SelectedIndex = 0;

行を追加してみました

listBox1.SelectedIndex = listBox1.SelectedIndex + 1;

インデックスを元の状態から1つインクリメントしますが、違いはありません。

4

1 に答える 1

1

アリナBの提案に従って答えてください。

アイテムがlistBoxの最後である場合を除いて、SelectedIndexを取得してから再設定します。したがって、それを-1に設定します。

    private void addSoftware()
    {
        int x = listBox1.SelectedIndex;
        try
        {
            if (listBox1.Items.Count > 0)
            {

                listBox2.Items.Add(listBox1.SelectedItem.ToString());
                listBox1.Items.Remove(listBox1.SelectedItem);
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


        if (listBox1.Items.Count > 0)
            listBox1.SelectedIndex = 0;
        listBox2.SelectedIndex = listBox2.Items.Count - 1;

        try
        {
            // Set SelectedIndex to what it was
            listBox1.SelectedIndex = x;
        }

        catch
        {
            // Set SelectedIndex to one below if item was last in list
            listBox1.SelectedIndex = x - 1;
        }
    }
于 2013-03-03T15:22:52.587 に答える