2014-10-28 2 views
0

У меня есть более чем 30 изображений поле в виде окна с именемOnClick событие для PictureBox

PictureBox1 
PictureBox2 
PictureBox3 
.....so on 

Я имею писать ту же самую процедуру для функции мыши для каждого из них. Я просто хочу написать один обработчик, который будет обрабатывать события щелчка для всего PictureBox и вызывать одну и ту же функцию.


Для грубого технического примера .. Извините за формат JavaScript


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

Возможный дубликат [Как обрабатывать несколько событий с одним и тем же Sub] (http://stackoverflow.com/questions/13323397/how-to-handle-multiple-click-events-with-same-sub) – Plutonix

ответ

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, чтобы позже отсоединить обработчик событий.

На первый взгляд кажется странным, что у него так много картинных ящиков. Возможно, вам захочется рассмотреть возможность создания собственного контента в одном элементе управления или динамическую загрузку элементов управления во время выполнения.

Смежные вопросы