我在一个名为
的窗体中有超过30个图片框PictureBox1
PictureBox2
PictureBox3
.....so on
我必须为每一个单击函数编写相同的过程。 我只是希望能够编写一个处理所有PictureBox的click事件并调用相同函数的处理程序。
粗略的技术示例..对不起JavaScript格式
picturebox.onclick(){
var a=get_index(this); //gets address of the clicked picturebox
somefunction(a);
}
答案 0 :(得分:3)
如果您使用Handles
关键字(这是从控件处理事件的默认典型方法),您可以向Handles
子句添加多个事件名称,例如:
Private Sub OnClick(sender As Object, e As EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click
' Handles click events from PictureBox1, PictureBox2, and PictureBox3
End Sub
或者,您可以在没有Handles
子句的情况下声明事件处理程序方法,然后自己手动将其附加到事件,如下所示:
Private Sub OnClick(sender As Object, e As EventArgs)
' ...
End Sub
' ...
AddHandler PictureBox1.Click, AddressOf OnClick
AddHandler PictureBox2.Click, AddressOf OnClick
AddHandler PictureBox3.Click, AddressOf OnClick
或者,如果你有图片框控件列表,你可以在循环中添加事件处理程序,如下所示:
Dim myPictureBoxes() As PictureBox = {PictureBox1, PictureBox2, PictureBox3}
For Each i As PictureBox in myPictureBoxes
AddHandler i.Click, AddressOf OnClick
Next
或者,您可以通过名称从表单Controls
集合中访问它们:
For i As Integer = 1 to 30
Dim c As Control = Me.Controls("PictureBox" & i.ToString())
AddHandler c.Click, AddressOf OnClick
Next
但请记住,如果您手动调用AddHandler
,则还需要调用RemoveHandler
以便稍后分离事件处理程序。
表面上看,有这么多像这样的图片框似乎很奇怪。您可能需要考虑在单个控件中自定义绘制内容,或者考虑在运行时动态加载控件。