我有一个GroupBox,里面有一堆OvalShapes,叫做OvalShape1,OvalShape2等等.
我试图创建一个为每一个循环,以改变每个人的颜色。我的代码是:
For Each childcontrol As OvalShape In GroupBox1.Controls
Dim opOv As OvalShape = childcontrol
Randomize()
opOv.BackColor = System.Drawing.ColorTranslator.FromWin32(RGB(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)))
Next这给了我一个例外:
“不能将'Microsoft.VisualBasic.PowerPacks.ShapeContainer‘类型的对象关联到'Microsoft.VisualBasic.PowerPacks.OvalShape'.”类型
试试看:
For Each childcontrol As OvalShape In GroupBox1.Controls
Randomize()
childcontrol.BackColor = System.Drawing.ColorTranslator.FromWin32(RGB(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)))
Randomize()
'childcontrol.BorderColor = System.Drawing.ColorTranslator.FromWin32(RGB(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)))
Next给了我同样的例外。
不,我没有忘记将BackStyle设置为不透明的。
我该如何解决这个问题?我想使用一个for每一个循环来更改OvalShapes的颜色。
帮助?
发布于 2016-01-13 01:41:59
MSDN的备注如下:
LineShape、OvalShape或RectangleShape控件只能包含在ShapeContainer对象中,该对象充当行控件和形状控件的画布。当您在设计时将一行或形状添加到窗体或容器中时,如果还不存在ShapeContainer,则会自动创建一个time。
因此,正如错误消息所暗示的,椭圆是一个Shapes集合的ShapeContainer。将代码更改为:
' get the shape container from the group's controls
' allows that there might be other controls
Dim myShapeCont = GroupBox1.Controls.OfType(Of ShapeContainer).FirstOrDefault
' iterate the ovals there
For Each oval As OvalShape In myShapeCont.Shapes
oval.BackColor = Color.FromArgb(255,
rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))
Next在任何ShapeContainer中都应该只有一个ControlsCollection。因此,这个容器被取出,然后迭代卵形来设置背景色。
您可以通过ShapeContainer1.Shapes循环,但是VB为您创建了这些代码,您无法看到它们,所以除非您查看设计人员代码,否则您将不知道“名称”是什么。其他说明:
Random类,而不是VB的Rnd函数(函数的大写错误,您传递的是Min和Max)。Randomize与VB Rnd函数一起使用,在这里没有效果。ColorTranslator。上面的代码通过指定R,G,B值直接创建一个颜色。第一个值是alpha或透明度。如果您对椭圆感到厌烦,或者只是决定在混合中添加Rectangles,那么尝试将Rectangle转换到Oval时会出现类似的错误。将此用于您的循环:
For Each shape As SimpleShape In myShapeCont.ShapesSimpleShape是所有PowerPack形状共有的基类,允许您设置所有形状(如BackColor )共有的属性。
https://stackoverflow.com/questions/34756645
复制相似问题