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 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料