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

C# Winform 如何判断列表选中项未被添加、避免重复添加

禁止列表重复添加选中项实现方案

原有逻辑问题

你原有代码里的重复判断逻辑完全无效:
lstAvailableOptions.SelectedIndex.ToString() == lstSelectedOptions.Items.ToString() 这段逻辑中,前者是把选中项的数字索引转成字符串,后者是将已选列表的整个集合对象转成字符串(返回的是集合的类型名,不是集合里的内容),二者永远不可能相等,相当于没有做重复校验。

修正后的代码

// CREATE LIST FOR AVAILABLE OPTION PRICES (parallel to listbox)
List<double> dblAvailableItems = new List<double> { 775.18, 567.99, 312.03, 1934.99, 609.82, 1251.04, 190.08, 82.00, 600.00 };

// CREATE LIST FOR SELECTED OPTION PRICES (parallel to listbox - empty to start)
List<double> dblOrder = new List<double>();

public frmPriceCar()
{
    InitializeComponent();
}

private void lstAvailableOptions_DoubleClick(object sender, EventArgs e)
{
    // 先判断是否有选中的可用项
    if (lstAvailableOptions.SelectedIndex > -1)
    {
        // 拿到当前选中的项文本和对应价格
        var selectedItem = lstAvailableOptions.Items[lstAvailableOptions.SelectedIndex];
        double selectedPrice = dblAvailableItems[lstAvailableOptions.SelectedIndex];
        
        // 判断已选列表中是否已经存在该项
        if (lstSelectedOptions.Items.Contains(selectedItem))
        {
            MessageBox.Show("item already selected");
            return;
        }

        // 不存在则执行添加逻辑
        dblOrder.Add(selectedPrice);
        lstSelectedOptions.Items.Add(selectedItem);
        CalcTotal();
    }
}

逻辑说明

  • 优先校验是否有选中项,避免后续取值出现空引用异常
  • 直接调用Items.Contains()方法校验已选列表中是否已经存在当前要添加的项,只要选项文本唯一就可以准确判断重复
  • 如果判断存在重复直接弹提示终止后续逻辑,不存在再执行添加和计算操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:15:03