动态AddHandler

时间:2012-03-04 23:59:58

标签: .net vb.net winforms addhandler

表格上有很多按钮(144个按钮)。每个按钮的名称是不同因素的组合。

我需要他们在按下时都做同样的事情。我在一个叫做“ClickButton”的Private Sub下有这个活动。

我想使用循环,将AddHandler的每个按钮添加到“ClickButton”事件中。

首先,我需要解决每个按钮。我通过在循环中动态构造它们的名称来实现这一点。

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不起作用。但是,如果我只是写一个按钮的名称之一;

AddHandler R020011, AddressOf ClickButton

然后它确实有效。 Me.Controls.Find出了点问题。它似乎无法在该名称下找到任何奇怪的按钮,因为我在其他部分中使用相同的代码并找到该按钮。

1 个答案:

答案 0 :(得分: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