我已经解决了以某种方式对对象进行分组的问题,在程序开始时,我循环遍历所有控件并将所有TextBox
和ListBoxes
存储在{{1}中}。
当我尝试访问它们时,我会这样做:
List<Controls>
这是有效的,但当我尝试foreach(var g in controlsList)
{
g.Text = "VALUE";
}
错误的时候,我猜这与那个特定于g.SelectedIndex = 0
的属性有关。我该如何解决或解决这个问题?
答案 0 :(得分:3)
您只需使用OfType
过滤控件:
foreach(ListBox l in Controls.OfType<ListBox>())
l.SelectedIndex = 0;
答案 1 :(得分:2)
我认为这就是你要找的东西:
foreach (var c in Controls)
{
var listBox = c as ListBox;
if (listBox != null)
{
listBox.SelectedIndex = 0;
}
}
每个控件都安全地转换为ListBox
。如果不是,则结果将为null
,并且将被if块跳过。
答案 2 :(得分:0)
要访问该属性,您必须先转换为目标类型:
foreach(var control in controlsList)
{
if(control is ListBox) // check if this control is a listbox
((ListBox)control).SelectedIndex = 0; // now it is save to cast to listbox
}
使用as运算符可以完成同样的操作:
foreach(var control in controlsList)
{
var listBox = control as ListBox;
if(listBox != null) // check if cast was ok
listBox.SelectedIndex = 0; // use listBox
}
答案 3 :(得分:-1)
您是对的,该属性特定于列表框。 您需要将其强制转换为正确的对象才能访问它。
以下是一个例子:
foreach(var c in controlsList)
{
c.Text = "VALUE";
if (c is ListBox)
{
ListBox listBox = c as ListBox;
listBox.SelectedIndex = 0;
}
}