onClick事件对于Picturebox

时间:2014-10-28 14:51:48

标签: vb.net winforms picturebox

我在一个名为

的窗体中有超过30个图片框
PictureBox1
PictureBox2
PictureBox3
.....so on 

我必须为每一个单击函数编写相同的过程。 我只是希望能够编写一个处理所有PictureBox的click事件并调用相同函数的处理程序。


粗略的技术示例..对不起JavaScript格式


picturebox.onclick(){
var a=get_index(this); //gets address of the clicked picturebox
somefunction(a);
}

1 个答案:

答案 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以便稍后分离事件处理程序。

表面上看,有这么多像这样的图片框似乎很奇怪。您可能需要考虑在单个控件中自定义绘制内容,或者考虑在运行时动态加载控件。