根据其选择的值,禁用(#)位于另一个组合框下方的组合框

时间:2018-07-19 01:27:21

标签: c# wpf winforms combobox

说我有多个组合框彼此叠放。

**[_______] Combobox #1  
  [_______] Combobox #2  
  [_______] Combobox #3  
  [_______] Combobox #4  
  [_______] Combobox #5  
  [_______] Combobox #6  
  [_______] Combobox #7**  

如果在任何时候我从一个组合列表中选择下拉列表,该组合列表是从一些值列表中馈送的(为简单起见,假设数字1-5),则该组合框选择的值将禁用该组合框下面的#个组合框。因此,如果组合框#1选择值为“ 3”,则组合框#2,#3和#4将被禁用或具有一些关联的值(如“ 0”),以知道它现在已经消失了。然后,我可以继续说我选择了组合框5,并选择了一个值“ 2”,最后看起来像这样:

**[___3___] Combobox #1**  
  [_______] Combobox #2  
  [_______] Combobox #3  
  [_______] Combobox #4  
**[___2___] Combobox #5**  
  [_______] Combobox #6  
  [_______] Combobox #7  

(禁用组合框2、3、4、6、7)。我还需要重置该过程,这意味着更改所选值将更改并相应地更新禁用框的数量。

我想要实现的代码中的粗略想法:

private void combobox#_SelectedValueChanged(object sender, Eventargs e)  
{  
    for (x in combobox#.SelectedValue)  
        combobox[#+x].Enabled = false;  
}  

有什么想法使这成为可能吗?谢谢!理想的情况是在C#winform中,但如果可以提供更好的解决方案,则可以使用WPF。

1 个答案:

答案 0 :(得分:1)

将组合框放入列表或数组中,例如:

var comboBoxes = new List<ComboBox> { comboBox1, comboBox2, comboBox3, ... };

然后像您一样使用代码,但是使用数组索引而不是尝试编写名称。请记住,组合框(或任何其他引用类型)的集合只是对象引用的集合。它们的成本不高。

相关问题