【问题标题】:Disable (#) of comboboxes located below another combobox based on its selected value根据所选值禁用 (#) 位于另一个组合框下方的组合框
【发布时间】:2018-12-27 00:38:00
【问题描述】:

假设我有多个组合框堆叠在一起。

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

如果我在任何时候从某个值列表(为简单起见,假设数字 1-5)提供的组合框中选择下拉列表,则组合框选择的值将禁用它下方的组合框。因此,如果 Combobox #1 选择了值“3”,则 Combobox #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 提供更好的解决方案,则对它开放。

【问题讨论】:

  • this.Controls.Find(controlName) 应该能帮到你。
  • 啊,这是我一直在寻找的一件事。那么本质上 controlName 是否能够在 for 循环中调用不同的组合框?
  • 您是否动态生成字段?显示您的代码
  • 当您不想在selectedValueChanged 事件中编写大量代码时,就会出现这种情况。只有这个 - 您需要使用组合框值矩阵编写控制器类。并且当任何值发生变化时,停止事件处理并根据矩阵设置值,然后恢复事件处理
  • @T.S.矩阵和控制器听起来是正确的想法。介意分享一个简单的例子吗?

标签: c# wpf winforms combobox


【解决方案1】:

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

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

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

【讨论】:

  • 我仍然无法完全弄清楚您在做什么,或者更重要的是,为什么。但是 cmets 问题的答案很简单。假设有两件事被禁用,你做了一些事情来表明应该禁用一组不同的三件事。浏览列表,启用除您想要新禁用的那些之外的所有内容。您可以将已禁用的东西设置为 false (这不会改变任何东西)。不要只遍历您想要禁用的那些,遍历每个项目并根据需要启用或禁用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多