根据以前的组合框,选择未选择的ComboBox选项

时间:2014-11-09 19:59:10

标签: c# winforms combobox

对不起,如果这个问题令人困惑,这就是我想要做的。

我在winform中有4个组合框。 所有4个组合框中都有相同的信息(即街道地址)

如果在我选择的第一个组合框中,例如,First St - 如何在其他组合框中使First St变灰(或不可选)。


编辑:

我将以下代码放在comboBox1_SelectedIndexChanged中:

    for (int i = 0; i < comboBox2.Items.Count; i++)
    {
        if (comboBox2.Items[i] == comboBox1.SelectedItem)
        {
            comboBox2.Items.Remove(comboBox2.Items[i]);

                i--;
            }
        }
    }

然而,这适用于从后续组合框中删除第一选择 如果我不小心选择了错误的街道,然后从第一个组合框中选择了正确的街道,则从第二个组合框中移除两个街道

e.g。 - &GT;第一选择主街 我是指First St

现在我转到第二个comboBox,Main St和First St都被删除了。 这是解决这个问题的方法,还是我不得不希望用户不会犯错?

2 个答案:

答案 0 :(得分:0)

例如,如果您有comboBox1comboBox2,则可以根据之前控件的选择过滤可用选项。

var data = new[] {"a", "b", "c"};

comboBox1.DataSource = comboBox2.DataSource = data;

comboBox1.SelectedValueChanged += (sender, args) =>
    comboBox2.DataSource = data.Where(item => 
        !item.Equals(comboBox1.SelectedValue)).ToArray();

答案 1 :(得分:0)

或者从另一方使用方法 只需检查是否已在另一个ComboBox控件中选择了第二个ComboBox中的选定值

string _notSelected = "n/a";
var streets = new[] {_notSelected, "Street One", "Street Two"};
this.comboBox1.DataSource = streets;
this.comboBox2.DataSource = streets;

void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox current = (ComboBox)sender;
    if(current.SelectedValue != null)
    {
        //Here you can compare indexes of all comboboxes or values
        if(this.combobox1.SelectedValue != null && 
           this.combobox1.SelectedValue.ToString().Equals(current.SelectedValue.ToString())
        {
            current.SelectedValue = _notSelected;
        }

        // ...same for other comboboxes...
    }
}