1

我有 10 个自定义用户控件,ID 分别为 usercontrol1、usercontrol2、usercontrol3......usercontrol10。

我想将所有这些用户控件添加到列表“allusercontrol”中。我用这样的蛮力做到这一点

allusercontrol.Add(usercontrol1);
allusercontrol.Add(usercontrol2);
allusercontrol.Add(usercontrol3);
.
.
.
.
.

有没有更优雅、更简单的方法来完成这项琐碎的任务?您确实看到用户控件 ID 是系列的一部分"usercontrol"+an int

4

3 回答 3

1

我建议不要使用这种方法,因为它容易出错。如果您想重命名它们,如果您忘记了这一点并添加其他名称ButtonX不应该在此列表中的控件怎么办?

相反,我会将它们收集在容器控件中,例如Panel. 然后你可以使用LINQ找到相关的Buttons

var myButtons = myPanel.Controls.OfType<Button>();

Enumerable.OfType将相应地过滤和投射控件。如果你想更多地过滤它们,你可以使用Enumerable.Where,例如:

var myButtons = myPanel.Controls
                       .OfType<Button>()
                       .Where(btn => btn.ID.ToLower().StartsWith("button"));

现在你可以迭代那些Buttons,例如:

foreach(Button btn in myButtons)
{
    // do something amazing
}

或者你可以打电话ToList()来得到一个List<Button>(你问题的核心):

List<Button> allbuttons = myButtons.ToList();
于 2012-07-02T10:19:57.440 回答
0

尝试使用此代码

List<UserControl> controls = new List<UserControl>
{
    usercontrol1,
    usercontrol2,
    usercontrol3
};
于 2012-07-02T10:17:21.820 回答
0

使用 Control.ControlCollection.AddRange - 看这里

于 2012-07-02T10:34:17.920 回答