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 中的操作。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?