0

MS パワー パックから 40 ほどの OvalShapes を作成しました。ユーザーがそれらをクリックすると、クリックした楕円の色を変更するはずの別の関数に ID が送信されます。残念ながら、このControls方法はうまくいかないようです。

Controls.Item(Dummy).fillcolor = Color.RedDummy はコントロールの名前を含む文字列です。

私はVB.NETにかなり慣れていないので、使用する以外に文字列を介してフォーム上のものを参照する別の方法があるかどうかわかりませんControls。Google はこの問題についてあまり役に立ちませんでした。私が見つけたのはCType、楕円形に一致するすべてのコントロールを使用してすべての形状を検索する方法でしたが、1 つのコントロールを変更したいだけでは役に立ちません...

編集:次のようなことができるようになりたいと思っています:

For i = 1 to 40
     OvalName = "Oval" & i
     if Ovali = then do something
Next
4

3 に答える 3

2

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
于 2014-05-20T02:44:17.237 に答える
0

OvalShapeプロパティにアクセスできるように、コントロールをキャストする必要があります。

DirectCast(Controls(Dummy), OvalShape).FillColor = Color.Red
于 2014-05-19T00:54:50.740 に答える