我有一个带有一组组合框的 winform,所有组合框都具有相同的列表项。
我需要一种方法来确认当用户在每个框中选择一个值后,他们只选择了每个列表值一次。
例如: cbox1 cbox2 cbox 3 项目 A 项目 B 项目 A(这需要标记错误,因为项目 A 已在 cbox1 中选择)
我正在考虑尝试使用 selectedvaluecommited 操作(因为在我填充列表后,我将所选索引更改为 -1,因此它们都显示“空”开始),但使其工作的循环似乎在躲避我。
背景:这是选择字段来构建电子表格,用户需要选择字段顺序。
最佳答案
你可以这样做(快速而肮脏):
为所有三个组合框添加 SelectedIndexChanged
处理程序(在示例中的 Form_Load 中)
comboBox1.SelectedIndexChanged += CheckComboBoxes;
comboBox2.SelectedIndexChanged += CheckComboBoxes;
comboBox3.SelectedIndexChanged += CheckComboBoxes;
在 CheckComboBoxes 方法中进行检查:
private void CheckComboBoxes(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex == comboBox2.SelectedIndex ||
comboBox1.SelectedIndex == comboBox3.SelectedIndex ||
comboBox2.SelectedIndex == comboBox3.SelectedIndex)
MessageBox.Show("comboboxes are not unique");
}
编辑: 这是具有 n 个组合框时的方法。将所有项目放入列表中,选择不同的值并将该不同的计数与项目计数进行比较...如下所示:
private void CheckComboBoxes(object sender, EventArgs e)
{
List<string> comboValues = new List<string>();
foreach (Control c in this.Controls)
{
if (c is ComboBox && !string.IsNullOrEmpty((c as ComboBox).SelectedItem.ToString()))
comboValues.Add((c as ComboBox).SelectedItem.ToString());
}
if (comboValues.Distinct().ToList().Count < comboValues.Count)
MessageBox.Show("not all combos are unique");
}
关于c# 确认每个组合框都选择了唯一的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41831288/