有没有办法在C#Windows窗体中为所有ComboBox设置SelectedIndex?
我试过这个:
DataType
但似乎没有用。
答案 0 :(得分:3)
简短回答:如果不是所有控件都是ComboBox
,那么它将失败并显示InvalidCastException
。第一个也是最简单的技巧只考虑ComboBox
:
foreach (var cb in Controls.OfType<ComboBox>())
cb.SelectedIndex = -1;
更长的回答:请注意,如果您有一个控件树,这将失败。你可能想要编写一个扩展方法Descendants()来像这样使用:
foreach (var cb in Descendants().OfType<ComboBox>())
cb.SelectedIndex = -1;
如果可能的实现类似于未经测试的实现:
public static IEnumerable<Control> Descendants(this Control control)
{
yield return control;
var descendants = control.Controls.Cast<Control>().SelectMany(x => Descendants(x));
foreach (var descendant in descendants)
yield return descendant;
}
注意:但请注意,它可能不是长期的最佳解决方案,您应该以某种方式标记这些组合框或对其进行数据绑定并处理(View)模型而不是直接操作UI控件。
答案 1 :(得分:2)
foreach (Control cnl in Controls)
{
if(cnl is ComboBox)
{
ComboBox cb = (ComboBox)cnl;
cb.SelectedIndex = -1;
}
}
这应该有用。
答案 2 :(得分:1)
添加如下函数:
private void SetComboIndex(Control parent)
{
foreach (Control c in parent.Controls)
{
if(c is ComboBox)
{
ComboBox cb = (ComboBox)c;
cb.SelectedIndex = -1;
}
SetComboIndex(c);
}
}
并从表单中调用它:
SetComboIndex(this)
答案 3 :(得分:0)
并非控件中的所有项目都是组合框。 用这个:
foreach (var control in Controls)
{
if (control is ComboBox)
((ComboBox)control).SelectedIndex = -1;
}