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

按照 Alina B 的建议回答。

我得到 SelectedIndex 然后重新设置它,除非该项目是 listBox 中的最后一个项目,因此将其设置为原来的值 - 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 回答