首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态AddHandler

动态AddHandler
EN

Stack Overflow用户
提问于 2012-03-05 07:59:58
回答 1查看 1.4K关注 0票数 1

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

我需要他们在按下的时候都做同样的事情。我在一个名为"ClickButton“的私人Sub下有这个活动。

我想使用一个循环,将每个按钮AddHandler到"ClickButton“事件。

但是,首先,我需要处理每个按钮。我通过在循环中动态构造它们的名称来做到这一点。

代码语言:javascript
复制
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不工作。但是,如果我只写一个按钮的名称;

代码语言:javascript
复制
AddHandler R020011, AddressOf ClickButton

那么它确实起作用了。Me.Controls.Find出了点问题。它似乎找不到该名称下的任何按钮,这很奇怪,因为我在其他部分中使用了相同的代码,它会找到按钮。

EN

回答 1

Stack Overflow用户

发布于 2012-03-05 15:58:33

您定义了Dim PeriodRoomID As New Button out of for语句,因此每次设置名称时,都要将其设置为相同的按钮名称,这样就不需要这个按钮和PeriodRoomID了,只需:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9560078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档