【问题标题】:Clearing Multi-Selected Items From Listbox C#从列表框 C# 中清除多选项目
【发布时间】:2014-06-10 05:13:48
【问题描述】:

我尝试过的:

尝试 1:

for(int x = listBox1.SelectedIndices.Count - 1; x>= 0; x--)
{ 
    int idx = listBox1.SelectedIndices[x];
    listBox2.Items.Add(listBox1.Items[idx]); 
    listBox1.Items.RemoveAt(idx);
} 

尝试 2:

ArrayList tmpArr = new ArrayList();
foreach (object obj in listBox1.SelectedItems)
{
    listBox2.Items.Add(obj);
    tmpArr.Add(obj);
}
foreach (object obj in tmpArr.ToArray())
{
    listBox1.Items.Remove(obj);
}

还尝试了以下帖子中的所有内容:How to remove multiple selected items in ListBox?

仍然没有任何效果。我做错了什么?

【问题讨论】:

    标签: c# listbox


    【解决方案1】:
    var selectedItems = new object[listBox1.SelectedItems.Count];
    
    listBox1.SelectedItems.CopyTo(selectedItems, 0);
    
    foreach (var item in selectedItems)
    {
        listBox1.Items.Remove(item);
    }
    

    或者用一点 LINQ 来简化代码:

    foreach (var item in listBox1.SelectedItems.Cast<object>().ToArray())
    {
        listBox1.Items.Remove(item);
    }
    

    这里的原因是你先把所有选中的项目放到另一个列表中。最初的问题是您对ListBox 所做的任何更改都会更改SelectedItemsSelectedIndices 之类的内容。一旦您创建了一个独立的数组并将所选项目放入其中,您对ListBox 所做的任何操作都不会影响该数组,因此您可以正常枚举它。

    【讨论】:

    • 非常感谢。工作:D
    • 如果一个答案解决了您的问题,那么请接受作为正确答案来表明这一点。
    【解决方案2】:
    listbox1.BeginUpdate();
    
    for (int x = listBox1.SelectedIndices.Count - 1; x >= 0; x--)
    {
        int idx = listBox1.SelectedIndices[x];
        listBox1.Items.RemoveAt(idx);
    }
    
    listbox1.EndUpdate();
    

    如果您不能保证列表中的每个对象都是唯一的,那么这是正确的方法,以确保删除正确的选定项目。

    如果列表框中有多个相同的对象,则必须通过“索引”引用它们,否则如果通过“项目”删除它们,它将删除它找到的任何匹配项目的第一个实例。

    我正在编写一个公交路线规划器,它要求复制列表中的航点标记。这些被存储为字符串,所以例如我可能有“w1”、“w2”、“w3”...“w2”(想想一辆公共汽车沿着一条大街行驶,绕几个街区然后返回从另一边下来了解我为什么会这样......我只需要在道路中心的航路点标记,而不是在每条车道上)

    如果我选择了最后一个“w2”标记作为范围的一部分并使用 selectedItem() 方法删除它们,它将删除第一个“w2”,而不是第二个。通过使用 SelectedIndex() 方法,它根据位置而不是值进行删除,因此重复值可以安全地保持不变。

    我只是想补充一点,因为我刚刚处理了同样的问题,所以亲眼目睹了由 SelectedItem() 引起的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多