对于使用PowerPack OvalShapes的每个循环

时间:2016-01-13 00:57:59

标签: vb.net

我有一个包含一堆OvalShapes的GroupBox,名为OvalShape1,OvalShape2等......

我正在尝试创建一个For Each循环来改变每个人的颜色。我的代码是这样的:

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 each循环

更改OvalShapes的颜色

帮助?

1 个答案:

答案 0 :(得分:1)

MSDN在备注中有这样的说明:

  
    

LineShape,OvalShape或RectangleShape控件只能包含在ShapeContainer对象中,该对象充当线条和形状控件的画布。

         

在设计时向表单或容器添加行或形状时,如果尚不存在ShapeContainer,则会自动创建ShapeContainer。

  

正如错误消息所暗示的那样,椭圆是Shapes的{​​{1}}集合。将您的代码更改为:

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循环,但是VB为你创造了这些,你无法看到它们,所以你不会知道这个名字是什么'除非你看一下设计师代码。其他说明:

  • 看起来您正在使用NET ShapeContainer1.Shapes类而不是VB Random函数(函数的大小写错误,并且您正在传递Min和Max)。 Rnd旨在与VB Randomize函数一起使用,此处不起作用。
  • 无需使用Rnd。上面的代码通过指定R,G,B值直接创建颜色。第一个值是ColorTranslator或透明度。

如果您厌倦了椭圆形,或者只是决定在混合中添加alpha,那么在尝试将Rectangles投射到Rectangle时会出现类似的错误}。请将此用作循环:

Oval

For Each shape As SimpleShape In myShapeCont.Shapes 是所有PowerPack形状共有的基类,允许您设置所有形状的共同属性,例如SimpleShape