1

フォームに多数のボタン (144 個のボタン) があります。各ボタンの名前は、さまざまな要因の組み合わせです。

押されたときにすべて同じことをする必要があります。「ClickButton」というプライベート サブの下にこのイベントがあります。

「ClickButton」イベントに各ボタンを AddHandler するために、ループを使用したいと思います。

ただし、最初に、各ボタンに対処する必要があります。これを行うには、ループ内で動的に名前を作成します。

Dim PeriodRoomID As New Button
Dim cntrl() As Control    

For Each Row In dsAllRooms.Tables("sqlAllRooms").Rows
            For Count = 1 To 13
                RoomID = Row.Item(0)
'This is where the name of each room is dynamically created. 
'It is stored in PeriodRoomID.name
                PeriodRoomID.Name = "R02" & RoomID.PadLeft(3, "0"c) & Count
                cntrl = Me.Controls.Find(PeriodRoomID.Name, True)
                AddHandler cntrl(0).Click, AddressOf ClickButton
            Next
        Next

問題は、何も起こらないことです。AddHandler が機能しません。ただし、ボタンの名前の1つを単純に書くと、

AddHandler R020011, AddressOf ClickButton

その後、それは機能します。Me.Controls.Find で問題が発生しています。他のセクションで同じコードを使用してボタンを見つけるため、その名前でボタンを見つけることができないようです。

4

1 に答える 1

1

Dim PeriodRoomID As New Buttonステートメントの外で定義するforので、名前を設定するたびに同じボタンに設定するPeriodRoomIDので、このボタンは必要なく、まったく必要ありませんcntrl:

For Each Row In dsAllRooms.Tables("sqlAllRooms").Rows
            For Count = 1 To 13
                RoomID = Row.Item(0)
                'This is where the name of each room is dynamically created.   
                dim Ctrls = Me.Controls.Find("R02" & RoomID.PadLeft(3, "0"c) & CStr(Count), True)
                If (Ctrls.Count > 0) Then
                   AddHandler Ctrls(0).Click, AddressOf ClickButton
                End If
            Next
Next
于 2012-03-05T07:58:32.633 に答える