You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何选中ListBox中与指定特征列表匹配的多个项?

问题原因分析

  1. 第一次代码报错的原因:SelectedItems 是只读集合,仅支持通过自身的 Add()、Remove()、Clear() 方法修改选中项,不支持直接赋值操作,因此直接给 SelectedItems 赋值会触发错误。
  2. 第二次仅选中一项的原因:SelectedValue 是单选场景下的属性,每次赋值都会清空上一次的选中状态,仅保留当前赋值的项,循环结束后只会保留最后一次遍历到的特征的选中状态。

前置检查

首先需要确认列表框已开启多选模式,将 SelectionMode 属性设置为 Multiple(点击直接切换多选状态)或 Extended(配合Ctrl/Shift键多选),默认的 Single 模式下仅支持选中单个项,无法实现多选效果。

正确实现代码

// 先清空原有选中项,避免旧的选中状态残留
featureListBox.SelectedItems.Clear();
// 遍历当前卡车的所有特征,逐个加入选中集合
foreach (var feature in m.Features)
{
    // 先判断特征是否存在于列表框数据源中,避免添加无效项报错
    if (featureListBox.Items.Contains(feature))
    {
        featureListBox.SelectedItems.Add(feature);
    }
}

注意事项

如果你的 Feature 是自定义引用类型,需要确保该类型重写了 Equals 和 GetHashCode 方法,或者在列表框上设置了正确的 SelectedValuePath 属性,否则 Contains 方法会因为引用地址不同,无法正确识别两个逻辑上相同的特征对象,导致匹配失败。如果是按特征ID匹配的场景,可以使用如下写法:

foreach (var feature in m.Features)
{
    var itemToSelect = featureListBox.Items.Cast<Feature>()
        .FirstOrDefault(f => f.Id == feature.Id);
    if (itemToSelect != null)
    {
        featureListBox.SelectedItems.Add(itemToSelect);
    }
}

内容的提问来源于stack exchange,提问作者BoogieMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:04