p1
是矩形的名称
c = Me.Controls.Find("a1", True)(0)
ctype(c, RectangleShape).FillColor = Color.Gray
出现错误是索引超出了数组的范围。
答案 0 :(得分:1)
RectangleShape不是Control,所以Controls.Find()永远找不到它。当你索引它时,你会得到一个空数组kaboom。您必须使用For Each迭代ShapeContainer.Shapes集合。所以,粗略地说:
For Each shp As Shape In ShapeContainer1.Shapes
If TypeOf shp Is RectangleShape AndAlso shp.Name = "a1" Then
DirectCast(shp, RectangleShape).FillColor = Color.Gray
End If
Next
其中" ShapeContainer1"是否是隐藏得很好的控件,它可以作为形状的主体。