对不起,如果这个问题令人困惑,这就是我想要做的。
我在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都被删除了。 这是解决这个问题的方法,还是我不得不希望用户不会犯错?
答案 0 :(得分:0)
例如,如果您有comboBox1
和comboBox2
,则可以根据之前控件的选择过滤可用选项。
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...
}
}