C# 在C中的列表框之间移动项目#

C# 在C中的列表框之间移动项目#,c#,webforms,listbox,C#,Webforms,Listbox,我开发了一个网页,其中我使用以下代码在两个列表框之间移动所选项目 它非常慢 是否对此进行了优化 protected void MovetoNext_Click(object sender, EventArgs e) { try { for (int i = 0; i < lstCategory.Items.Count; i++) { if (lstCategory.Items[i].Selected)

我开发了一个网页,其中我使用以下代码在两个列表框之间移动所选项目

它非常慢

是否对此进行了优化

protected void MovetoNext_Click(object sender, EventArgs e)
{
    try
    {
        for (int i = 0; i < lstCategory.Items.Count; i++)
        {
            if (lstCategory.Items[i].Selected)
            {
                lstCategory.Items[i].Selected = false;
                lstSelCategory.Items.Add(lstCategory.Items[i]);
                lstCategory.Items.RemoveAt(i);
                i = i - 1;
            }
        }
    }
    catch (Exception ex)
    {
    }
}
protectedvoid MovetoNext\u单击(对象发送方,事件参数e)
{
尝试
{
对于(int i=0;i
另一个编辑:如果你习惯于winforms,那么使用asp.net是很奇怪的。 这次实际测试的最新版本如下

使用System.Collections.Generic;
var selectedIndices=lstCategory.GetSelectedIndices();
var killList=新列表();
foreach(所选数据块中的var selIndex)
{
//将要删除的项目添加到kill列表和其他列表框
killList.Add(lstCategory.Items[selIndex]);
lstSelCategory.Items.Add(lstCategory.Items[selIndex]);
}
foreach(killList中的var killMe)
{
lstCategory.Items.Remove(killMe);
}
编辑:下面的代码不起作用。我以为问题是WinForms的问题。webcontrol列表框没有以下代码中使用的属性

在删除集合中的项目时,在选定的项目/索引上循环是危险的

下面是一个解决方案(使用LINQ),它将引用列表复制到选定项,然后使用该副本移动这些项:

var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
    lstCategory.Items.Remove(selItem);
    lstSelCategory.Items.Add(selItem);
}
var selItems=lstcontegory.SelectedItems.Cast().ToList();
foreach(selItems中的var selItem)
{
lstCategory.Items.Remove(selItem);
lstSelCategory.Items.Add(selItem);
}

我希望空的catch块不在您的真实代码中。我根据msdn关于网络控制的文档添加了一些代码。它使用GetSelectedIndices()方法而不是winform的listbox.SelectedItems属性。它显示错误“非泛型类型System.web.ui.Webcontrols.Listitem”不能与类型参数一起使用List()下的error msg我已再次编辑代码以使用列表而不是列表。我很抱歉搞混了。这次我在一个ASP.Net示例上测试了代码,它现在似乎可以工作了。谢谢你的帮助。但List()中仍然出现错误,显示“找不到类型或名称空间名称'List',是否缺少assebmley引用?”。请告诉我要为此包含的命名空间?列表是System.Collections.Generic的成员。我将把它添加到代码中。
var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
    lstCategory.Items.Remove(selItem);
    lstSelCategory.Items.Add(selItem);
}