c# 确认每个组合框都选择了唯一的值

标签 c# winforms combobox user-controls

我有一个带有一组组合框的 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/

相关文章:

c# - 无法使DataGridView与ComboBox下拉菜单一起使用

c - 在 C 中将参数从 ComboBox 传递到 GTKTreeView

vb.net - 将 MS Access 数据库中的列值填充到 VB .Net 组合框下拉值中?

c# - 可以根据 Windows 用户名自动登录 Forms 身份验证的 MVC 应用程序吗?

c# - 如何使用 Direct2D 在透明背景上呈现 ClearType 文本?

c# - 如何处理 Windows Phone 8 中的 ManipulationCompleted 事件?

c# - 使用 DataTable 的 LIKE 查询中的异常

C# - 修改 DaraGridView 中 column1 的值并将它们放入新列

c# - System.Threading.ThreadAbortException 在新线程中引发

c# - 将标签绑定(bind)到 "variable"