我无法将列表框中的所有选定项目移动到第二个列表框,这是代码:
void moveIn(ListBox inMoveOut, ListBox inMoveIn) {
inMoveOut.setMultipleSelect(true);
inMoveIn.setMultipleSelect(true);
// for each item in the listbox
for (int i = 0; i < inMoveOut.getItemCount(); i++) {
if (inMoveOut.isItemSelected(i)) {
// add item from the first listbox to the second lsitbox
inMoveIn.addItem(inMoveOut.getItemText(i), inMoveOut.getValue(i));
// delete item from the first listbox
inMoveOut.removeItem(i);
}
}
}
我可以选择多个项目,但只能移动一个项目,而不是所有选定的项目。请提出任何建议。
答案 0 :(得分:1)
由于您要删除循环中的项目,因此您需要更改循环限制。如果你从最后开始并转到开头,这不重要:
int size = inMoveOut.getItemCount()
for (int i = size - 1; i >= 0 ; i--) {
if (inMoveOut.isItemSelected(i)) {
// add item from the first listbox to the second lsitbox
inMoveIn.addItem(inMoveOut.getItemText(i), inMoveOut.getValue(i));
// delete item from the first listbox
inMoveOut.removeItem(i);
}
}
然而,这将以相反的顺序添加它们。所以这是另一种选择:
// First, copy them across
for (int i = 0; i < inMoveOut.getItemCount(); i++) {
if (inMoveOut.isItemSelected(i)) {
// add item from the first listbox to the second lsitbox
inMoveIn.addItem(inMoveOut.getItemText(i), inMoveOut.getValue(i));
}
}
// Then delete them
for (int i = 0; i < inMoveOut.getItemCount(); i++) {
if (inMoveOut.isItemSelected(i)) {
// delete item from the first listbox
inMoveOut.removeItem(i);
}
}
效率稍低,但它会完成这项工作。
答案 1 :(得分:0)
假设在第一次迭代中,该项目是从&#39; inMoveOut&#39; to&#39; inMoveIn&#39;,但是,当行inMoveOut.removeItem(i)
执行时, ListBox的大小已更改,
(即,inMoveOut.getItemCount()
现在具有不同的值),并且您的“循环”#39;仍将迭代inMoveOut.getItemCount()
次,实际上是旧项目计数。
我认为这可能是原因。
您可以留意'foreach
&#39;有点像东西,所以你摆脱了索引和提取项目。
for(ListBox item: inMoveOut)
{
// logic here
}