如何检查ListBox中是否存在与另一ListBox匹配的文本项
现有代码问题说明
你当前编写的逻辑仅比对了入场文本框与离场文本框的输入值,没有校验第一个入场牌照ListBox中的全量已存储条目,因此不符合业务需求。
正确实现代码
首先确认存储已入场牌照的ListBox控件名为listBoxEntrance,可直接使用如下逻辑实现校验:
// 读取并格式化待离场牌照输入,去除前后空格避免输入误差 string exitPlate = textBoxExit.Text.Trim(); // 空输入校验 if (string.IsNullOrWhiteSpace(exitPlate)) { MessageBox.Show("请输入需要登记离场的车辆牌照号"); return; } // 校验入场ListBox中是否存在对应牌照(使用LINQ写法,需提前引入using System.Linq;) bool hasEntranceRecord = listBoxEntrance.Items.Cast<string>().Any(plate => plate.Trim() == exitPlate); if (hasEntranceRecord) { // 存在入场记录,添加到离场ListBox listBoxExit.Items.Add($"Plate: {exitPlate} Exited"); // 可选逻辑:登记离场后自动移除入场记录,避免同一牌照重复离场 listBoxEntrance.Items.Remove(exitPlate); // 清空输入框 textBoxExit.Clear(); } else { // 无入场记录,弹出错误提示 MessageBox.Show($"校验失败:牌照 {exitPlate} 无入场记录,无法登记离场", "操作错误", MessageBoxButtons.OK, MessageBoxIcon.Error); }
如果项目未引入LINQ,可使用传统遍历方式实现校验:
bool hasEntranceRecord = false; foreach (var item in listBoxEntrance.Items) { if (item.ToString().Trim() == exitPlate) { hasEntranceRecord = true; break; } }
注意事项
- 如果入场ListBox的存储条目不是纯牌照号(例如也带有
Plate:前缀),需要先提取条目中的牌照字段再做比对 - 如需支持大小写不敏感的牌照校验,可将比对逻辑替换为
Equals(plate.Trim(), exitPlate, StringComparison.OrdinalIgnoreCase) - 可根据业务需要决定是否在登记离场后删除入场ListBox的对应记录
内容的提问来源于stack exchange,提问作者PerkZz
相关产品推荐
相关产品推荐

