ZCH1991926 2013-09-28 09:29 采纳率: 0%
浏览 1513

C# listbox控件 两个listbox间item的转移

第一段代码:
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < selected.Items.Count; i++)
{
if (selected.Items[i].Selected)
{
select.Items.Add(selected.SelectedItem);
selected.Items.Remove(selected.SelectedItem);
}

        }
    }

第二段代码:
protected void Button6_Click(object sender, EventArgs e)
{
ArrayList temp = new ArrayList();
for (int i = 0; i < select.Items.Count; i++)
{
if (select.Items[i].Selected)
{
temp.Add(select.Items[i]);
}

        }
       foreach (ListItem item in temp)
           {
               selected.Items.Add(item);
               select.Items.Remove(item);
           }
    }

上面两个都能执行,第一段是将listbox1中的移进listbox2中,第二段是将转移到listbox2中一些项在挪回listbox1中,可以运行且结果正确,第一段得出的应该是错误的结果才对,但没错;
 如果”将转移到listbox2中一些项在挪回listbox1中“用的是第一段代码,会出现错误(item出现重复,转移不了等),为什么? 
  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-21 10:24
    关注

    该回答引用ChatGPT

    在第一段代码中,循环体内的操作是将 selected.SelectedItem 移动到 select 中,但是移动时并没有考虑 i 的变化,导致在移动过程中可能会跳过某些项或者重复移动某些项。


    在第二段代码中,首先将 select 中被选中的项保存在 temp 中,然后再遍历 temp 中的每一项,将其从 select 中移回 selected 中。这样能够避免第一段代码中的问题,因为循环体内的操作不会对列表的项数产生影响,所以循环中的索引变量不会出现问题。


    如果将第一段代码用于“将转移到listbox2中一些项在挪回listbox1中”的操作中,那么在执行 selected.Items.Remove(selected.SelectedItem) 的时候,可能会导致某些项被跳过或者被重复移动。因此,最好使用第二段代码中的方法来实现将某些项从 select 移回 selected 中的操作。

    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示