我无意中发现了这段代码来遍历文本框,这正是我所需要的,但我需要对椭圆(Microsoft.VisualBasic.PowerPacks.OvalShape)这样做。
for (int i = 1; i < 29; i++)
{
TextBox textBox = (TextBox)Controls["textBox" + i];
}所以很可能看起来
for (int i = 1; i < 29; i++)
{
Shape oval = (Shape)???["oval" + i]
oval.FillColor = blue;
}我只是不知道什么是“控制”对应的形状。我不知道这段代码是否有效,所以请告诉我是否有其他方法可以做到这一点。
发布于 2015-03-18 16:55:59
您通常可以使用LINQ在集合中选择某种类型的控件,在本例中是Controls和ShapeContainer,方法是使用OfType<>。
var ovals = Controls.OfType<ShapeContainer>()
.SelectMany(sc => sc.Controls.OfType<OvalShape>());
foreach (var oval in ovals)
{
oval.FillColor = Color.Blue;
}正如GrawCube所指出的,ShapeContainer有自己的属性来访问它的形状,适当地命名为形状。您可能不得不使用它来代替:
var ovals = Controls.OfType<ShapeContainer>()
.SelectMany(sc => sc.Shapes.OfType<OvalShape>());考虑到一些ShapeContainers在面板中,而另一些则不是,查询会变得更加丑陋,但也不会太糟糕。首先搜索主控件集合,然后搜索所有子面板,并连接结果。
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>())));https://stackoverflow.com/questions/29127612
复制相似问题