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
相关产品推荐
相关产品推荐

