首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于使用PowerPack OvalShapes的每个循环

对于使用PowerPack OvalShapes的每个循环
EN

Stack Overflow用户
提问于 2016-01-13 00:57:59
回答 1查看 417关注 0票数 2

我有一个GroupBox,里面有一堆OvalShapes,叫做OvalShape1,OvalShape2等等.

我试图创建一个为每一个循环,以改变每个人的颜色。我的代码是:

代码语言:javascript
复制
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'.”类型

试试看:

代码语言:javascript
复制
 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的颜色。

帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-13 01:41:59

MSDN的备注如下:

LineShape、OvalShape或RectangleShape控件只能包含在ShapeContainer对象中,该对象充当行控件和形状控件的画布。当您在设计时将一行或形状添加到窗体或容器中时,如果还不存在ShapeContainer,则会自动创建一个time。

因此,正如错误消息所暗示的,椭圆是一个Shapes集合的ShapeContainer。将代码更改为:

代码语言:javascript
复制
' 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为您创建了这些代码,您无法看到它们,所以除非您查看设计人员代码,否则您将不知道“名称”是什么。其他说明:

  • 看起来您使用的是NET Random类,而不是VB的Rnd函数(函数的大写错误,您传递的是Min和Max)。Randomize与VB Rnd函数一起使用,在这里没有效果。
  • 没有必要使用ColorTranslator。上面的代码通过指定R,G,B值直接创建一个颜色。第一个值是alpha或透明度。

如果您对椭圆感到厌烦,或者只是决定在混合中添加Rectangles,那么尝试将Rectangle转换到Oval时会出现类似的错误。将此用于您的循环:

代码语言:javascript
复制
For Each shape As SimpleShape In myShapeCont.Shapes

SimpleShape是所有PowerPack形状共有的基类,允许您设置所有形状(如BackColor )共有的属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34756645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档