我遇到一个奇怪的问题,我可以将项目从一个列表框移动到另一个列表框,但不能将任何项目移回原始列表框。这是我的代码:
private void MoveListBoxItems(ListBox from, ListBox to)
{
for(int i = 0; i < first_listbox.Items.Count; i++)
{
if (first_listbox.Items[i].Selected)
{
to.Items.Add(from.SelectedItem);
from.Items.Remove(from.SelectedItem);
}
}
from.SelectedIndex = -1;
to.SelectedIndex = -1;
}
protected void Button2_Click(object sender, EventArgs e)
{
MoveListBoxItems(first_listbox, second_listbox);
}
protected void Button1_Click(object sender, EventArgs e)
{
MoveListBoxItems(second_listbox, first_listbox);
}
button2事件正常,但button1事件没有。列表框不是数据绑定的,我手动添加了项目。
也许有一些非常明显的我在这里失踪了?
提前感谢您的帮助。
答案 0 :(得分:1)
将其更改为:
private void MoveListBoxItems(ListBox from, ListBox to)
{
for(int i = 0; i < from.Items.Count; i++)
{
if (from.Items[i].Selected)
{
to.Items.Add(from.SelectedItem);
from.Items.Remove(from.SelectedItem);
// should probably be this:
to.Items.Add(from.Items[i]);
from.Items.Remove(from.Items[i]);
}
}
from.SelectedIndex = -1;
to.SelectedIndex = -1;
}
您的原始方法在这两个地方使用first_listbox
,而不是from
。另外,如果选择了多个项目,我想你的代码不起作用。
答案 1 :(得分:1)
更改for循环以迭代本地参数from
,而不是first_listbox
:
private void MoveListControlItems(ListControl from, ListControl to)
{
for(int i = 0; i < from.Items.Count; i++)
{
if (from.Items[i].Selected)
{
to.Items.Add(from.Items[i]);
from.Items.Remove(from.Items[i]);
}
}
from.SelectedIndex = -1;
to.SelectedIndex = -1;
}
如果您想一次移动多个项目,还需要切换添加和删除。
只是另一种想法,尽管主要是个人偏好,如果将参数类型切换为ListControl
,您也可以对ComboBox
使用相同的方法。