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 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)