c#列表中的控件和访问ListBox属性

时间:2017-09-08 10:47:54

标签: c# listbox controls

我已经解决了以某种方式对对象进行分组的问题,在程序开始时,我循环遍历所有控件并将所有TextBoxListBoxes存储在{{1}中}。 当我尝试访问它们时,我会这样做:

List<Controls>

这是有效的,但当我尝试foreach(var g in controlsList) { g.Text = "VALUE"; } 错误的时候,我猜这与那个特定于g.SelectedIndex = 0的属性有关。我该如何解决或解决这个问题?

4 个答案:

答案 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;
    }
}