通过索引值访问面板中的列表框 c#

Access to listbox in panel by index value c#

我有一个包含 35 个列表框的面板。我正在制作一个 foreach 循环以使用这些行访问这些列表框;

foreach (ListBox empBox in panel4.Controls.OfType<ListBox>())
{
    //do something
}

但我想通过使用 for 循环检查它们的索引来访问这些列表框。

喜欢;

for (int i = 0; i<panel4.Controls.Count; i++)
{
    Listbox empBox = panel4.Controls[i];
}

我知道我写的代码不正确,但我想到达具有索引值的列表框。

谢谢。

您可以从列表框创建列表(或数组):

List<ListBox> listBoxList = panel4.Controls.OfType<ListBox>().ToList();
for (int i = 0; i < listBoxList.Count; i++)
{
    Listbox empBox = listBoxList[i];
}

您可以使用 as 运算符检查 Controls 集合中特定索引处的控件是否为 ListBox:

int index = 1;
ListBox lb = panel1.Controls[4] as ListBox;
if(lb != null)
{
    //there is a ListBox control at index 1
}



for (int i = 0; i < panel1.Controls.Count; i++)
{
    ListBox lb = panel1.Controls[4] as ListBox;
    if(lb != null)
    {
       //there is a ListBox at index i
    }
}

相对于 列表框本身,您是否需要列表框的索引?如果是,则使用 Tim 的答案。

...或者您是否需要 ListBox 相对于 所有 面板中其他控件的索引?如果是后者,则执行以下操作:

foreach (ListBox empBox in panel4.Controls.OfType<ListBox>())
{
    int index = panel4.Controls.IndexOf(empBox);
    Console.WriteLine(index.ToString() + ": " + empBox.Name);
}