克隆列表框中的项目c#

时间:2010-03-13 17:15:47

标签: c# listbox clone

我有2个列表框,希望能够将所选项目从一个复制到另一个,我想要多少次。我设法做到这一点,但我有第二个列表框上的按钮,允许我上下..现在当第二个列表框中的项目是相同的(例如“鳃”和“鳃”)它不表现正常并且崩溃。

我有没有办法让他们在第二个列表框中作为单独的项目行事?

 private void buttonUp_Click(object sender, EventArgs e)
    {
        object selected = listBox2.SelectedItem;
        int index = list2.Items.IndexOf(selected);

        listBox2.Items.Remove(selected);
        listBox2.Items.Insert(index - 1, selected);
        listBox2.SetSelected(index - 1, true);
    }

    private void buttonAdd_Click(object sender, EventArgs e)
    {          
        DataRowView selected = (DataRowView)listBox1.SelectedItem;            
         string item  = selected["title"].ToString();
         listBox2.Items.Add(item);

    }

当我有重复的时候它工作正常,但是当我按下它时它们只是随机跳转。

(香港专业教育学院并未包括在内,因为它几乎和以上一样)

5 个答案:

答案 0 :(得分:1)

看起来你正在环游世界做一些简单的事情。我会使用List和数据绑定列表来解决这个问题。

// Add code
        DataRowView selected = listBox1.SelectedItem as DataRowView;
        if (selected != null)
        {
            _myList.Add(selected); // Adds at end
            BindList2();
        }

// Move up code
    int selectedIndex = listBox2.SelectedIndex;
    if(selectedIndex > 0)
    {
        var temp = _myList[selectedIndex];
        _myList.Remove(temp);
        _myList.InsertAt(selectedIndex - 1, temp);
        BindList2();
    }

// BindList2
public void BindList2()
{
    listBox2.DataSource = _myList;
    listBox2.DataBind();
}

答案 1 :(得分:0)

只是代码,因为其余的答案无论如何都会覆盖它:

 private void buttonAdd_Click(object sender, EventArgs e)
    {

        DataRowView selected = listBox1.SelectedItem as DataRowView;
        if (selected != null)
        {
            string item = selected["title"].ToString();
            listBox2.Items.Add(item);
        }
    }

    private void buttonUp_Click(object sender, EventArgs e)
    {
        string selected = listBox2.SelectedItem as string;
        int oldIndex = listBox2.SelectedIndex;
        int newIndex = oldIndex;

        if (!string.IsNullOrEmpty(selected) && listBox2.Items.Count > 1 && oldIndex > 0)
        {
            listBox2.SuspendLayout(); 

            listBox2.Items.RemoveAt(oldIndex);
            newIndex = oldIndex - 1;
            listBox2.Items.Insert(newIndex, selected);
            listBox2.SelectedIndex = newIndex;

            listBox2.ResumeLayout();

        }
    }

答案 2 :(得分:0)

当您有多个相同的项目时,可以使用SelectedIndex而不是SelectedItem。我还建议检查它不是-1。

答案 3 :(得分:0)

up例的问题是以下一组代码。

object selected = listBox2.SelectedItem;
int index = list2.Items.IndexOf(selected);

只有列表中有唯一项目时,此代码才能正常运行。一旦有了重复项,值index将成为列表中第一个说gills实例的索引,而不一定是所选值的索引。

您似乎在镜像listBox2list2中的项目。如果是这种情况,那么您可以直接在listBox2上使用SelectedIndex属性,因为索引在两个liss中都是相同的。

int index = listBox2.SelectedIndex;

答案 4 :(得分:0)

如果您尝试使用对象列表,请尝试实现Iclonnable。这将使同一项目的副本覆盖在&过度。另请注意,要将项目移动到顶部或底部,您不必删除列表中的项目。重新插回来。但您可以更改项目的索引。希望这会有所帮助。