C# 如何在形状(卵形1、卵形2、卵形3…)之间循环?

C# 如何在形状(卵形1、卵形2、卵形3…)之间循环?,c#,forms,visual-studio-2010,C#,Forms,Visual Studio 2010,我偶然发现这段代码可以在文本框中循环,这正是我所需要的,只是我需要为ovals(Microsoft.VisualBasic.PowerPacks.OvalShape)执行此操作 for(int i=1;ip.Controls.OfType() .SelectMany(sc=>sc.Shapes.OfType()); @GrawCube所有形状都是具有相似名称的椭圆形(oval1、oval2、oval3等)。它们储存在ShapeContainers@GrawCube是的,我有多个形状容器,每个容器

我偶然发现这段代码可以在文本框中循环,这正是我所需要的,只是我需要为ovals(Microsoft.VisualBasic.PowerPacks.OvalShape)执行此操作

for(int i=1;i<29;i++)
{
TextBox TextBox=(TextBox)控件[“TextBox”+i];
}
所以它可能看起来像

for (int i = 1; i < 29; i++)
{
   Shape oval = (Shape)???["oval" + i]
   oval.FillColor = blue;
}
for(int i=1;i<29;i++)
{
形状椭圆形=(形状)???[“椭圆形”+i]
椭圆形。圆角颜色=蓝色;
}

我只是不知道形状的“控制”对应物是什么。我不知道此代码是否有效,因此请告诉我是否有其他方法可以执行此操作。

您通常可以使用LINQ在集合中选择某种类型的控件,在这种情况下,
控件和
ShapeContainer
,方法是使用

考虑到一些ShapeContainer位于面板内部,而另一些则不在面板内部,查询会变得有点难看,但也不是太糟糕。首先搜索主控件集合,然后搜索所有子面板,并连接结果

var ovals = Controls.OfType<ShapeContainer>()
                .SelectMany(sc => sc.Shapes.OfType<OvalShape>())
                .Concat(Controls.OfType<Panel>()
                    .SelectMany(p => p.Controls.OfType<ShapeContainer>()
                        .SelectMany(sc => sc.Shapes.OfType<OvalShape>())));
var ovals=Controls.OfType()
.SelectMany(sc=>sc.Shapes.OfType())
.Concat(类型()的控件)
.SelectMany(p=>p.Controls.OfType()
.SelectMany(sc=>sc.Shapes.OfType());

@GrawCube所有形状都是具有相似名称的椭圆形(oval1、oval2、oval3等)。它们储存在ShapeContainers@GrawCube是的,我有多个形状容器,每个容器包含4个椭圆形。每个容器都在一个面板中(我猜这是一个表单控件?),您可以有一个列表,也可以创建一个类形状,然后有一个列表。后者更具可扩展性。哇,非常感谢你们两位,第二段代码成功了!哦,但它只适用于shapecontainer1。它是否有可能扩展到其他方面?我有8个。@GrantWinney啊是的,对不起,没有具体说明。其他ShapeContainer嵌套在面板中。“他们实际上是需要颜色的人。”格兰特尼说得没错。此代码影响的ShapeContainer是任何面板外部的ShapeContainer.Solved。非常感谢。
var ovals = Controls.OfType<ShapeContainer>()
                    .SelectMany(sc => sc.Controls.OfType<OvalShape>());

foreach (var oval in ovals)
{
    oval.FillColor = Color.Blue;
}
var ovals = Controls.OfType<ShapeContainer>()
                    .SelectMany(sc => sc.Shapes.OfType<OvalShape>());
var ovals = Controls.OfType<ShapeContainer>()
                .SelectMany(sc => sc.Shapes.OfType<OvalShape>())
                .Concat(Controls.OfType<Panel>()
                    .SelectMany(p => p.Controls.OfType<ShapeContainer>()
                        .SelectMany(sc => sc.Shapes.OfType<OvalShape>())));