OvalShapes を追加する方法や、使用しているコンテナの種類がわかりません。それらを Windows フォーム コントロールに追加するには、Slaks で言及されている shapeContainer を使用する必要があります。この例では、shapeContainer を作成して Form に追加し、次に shapeContainers.Shapes.Add メソッドを使用して楕円形をShapeCollection Classに追加しています。また、楕円形のクリック イベントにイベント ハンドラーをアタッチして、呼び出し元の Shape にアクセスし、EventHandler の送信側オブジェクトを介して塗りつぶしの色を変更できるようにします。これがうまくいくかどうかを確認してください。
Imports Microsoft.VisualBasic.PowerPacks
Public Class Form1
Dim offset As Integer = 0
Dim OvalContainer As New ShapeContainer
Public Sub New()
' This call is required by the designer.
InitializeComponent()
OvalContainer.Size = New Size(Me.Width, 50)
Me.Controls.Add(OvalContainer)
OvalContainer.Location = New Point(0, 0)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oval As New OvalShape()
oval.Size = New Size(30, 40)
oval.Location = New Point(offset, 0)
oval.FillStyle = FillStyle.Solid
oval.FillColor = Color.Transparent
oval.BorderColor = Color.Black
oval.BorderWidth = 2
AddHandler oval.Click, AddressOf ShapeClick
OvalContainer.Shapes.Add(oval)
offset += 40
End Sub
Private Sub ShapeClick(sender As Object, e As EventArgs)
Dim oval As OvalShape = DirectCast(sender, OvalShape)
If oval.FillColor.Equals(Color.Red) Then
oval.FillColor = Color.Blue
Else
oval.FillColor = Color.Red
End If
End Sub
End Class
OPの説明に従って編集
楕円を追加oval.Name = "oval" & index
すると、次のコードが機能するようにする name プロパティが追加されます。
このように Shapes Collection を反復処理できます (これは上記の例に基づいています)。
For Each o As OvalShape In OvalContainer.Shapes
If o.Name = "oval1" Then o.FillColor = Color.Azure
Next
ShapeContainer.Shapes.IndexOfKey
または、メソッドを使用して、探している正確な楕円形を検索できます
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim index As Integer = OvalContainer.Shapes.IndexOfKey("oval1")
If index >= 0 Then
DirectCast(OvalContainer.Shapes(index), OvalShape).FillColor = Color.Purple
End If
End Sub