我有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);
}
当我有重复的时候它工作正常,但是当我按下它时它们只是随机跳转。
(香港专业教育学院并未包括在内,因为它几乎和以上一样)
答案 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
实例的索引,而不一定是所选值的索引。
您似乎在镜像listBox2
和list2
中的项目。如果是这种情况,那么您可以直接在listBox2
上使用SelectedIndex属性,因为索引在两个liss中都是相同的。
int index = listBox2.SelectedIndex;
答案 4 :(得分:0)
如果您尝试使用对象列表,请尝试实现Iclonnable。这将使同一项目的副本覆盖在&过度。另请注意,要将项目移动到顶部或底部,您不必删除列表中的项目。重新插回来。但您可以更改项目的索引。希望这会有所帮助。