Обработка событий динамически созданных контролов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Обработка событий динамически созданных контролов

Сообщение GAGArin » 27.03.2010 (Сб) 13:20

Код: Выделить всё
        For i = 0 To MapWidth - 1
            For j = 0 To MapHeight - 1
                MapPictureBoxes(i, j) = New PictureBox
                MapPictureBoxes(i, j).Width = polygonWidth
                MapPictureBoxes(i, j).Height = polygonHeight
                MapPictureBoxes(i, j).Left = 20 + polygonWidth * i
                MapPictureBoxes(i, j).Top = 20 + polygonHeight * j
                Me.Controls.Add(MapPictureBoxes(i, j))
                MapPictureBoxes(i, j).Image = someBitmap
            Next
        Next

Хочется теперь обработать событие например клика по каждой из картинок. В Vb.6 создавал такое в конструкторе, в поиске нашел вроде какие-то отсылки на мертвые темы, но без конкретного кода в MSDN не знаю где именно искать. Понимаю, что всё просто должно быть, напишите плиз кому не лень.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Обработка событий динамически созданных контролов

Сообщение viter.alex » 27.03.2010 (Сб) 14:26

Ключевое слово AddHandler. Добавь такую процедуру
Код: Выделить всё
  Private Sub MapPictureBoxes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    MsgBox("По мне кликнули!")
  End Sub

а в коде в цикле поставь
Код: Выделить всё
AddHandler MapPictureBoxes(i, j).Click, AddressOf  MapPictureBoxes_Click
Лучше день потерять — потом за пять минут долететь!

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Re: Обработка событий динамически созданных контролов

Сообщение GAGArin » 27.03.2010 (Сб) 15:10

Тоесть делаем процедуру (одну) и всем экземплярам элемента говорим, что вон там лежит обработчик клика на тебя. В итоге все они будут вызывать одну процедуру... В принципе вполне приемлимо, вот только как понять по кому кликнули? Потыкаться в студии не могу, чисто теоретически кажется, что надо пробежать по всему массиву контролов и посмотреть кто из них похож на "sender" так ли это?

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Обработка событий динамически созданных контролов

Сообщение viter.alex » 27.03.2010 (Сб) 15:24

Ты всё правильно понял. Зачем пробегать по всем контролам, если он уже передан в параметре sender? Нужно sender привести к нужному тебе типу и работать с ним.
Код: Выделить всё
  Private Sub MapPictureBoxes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim mypb As PictureBox
    Try
      mypb = DirectCast(sender, PictureBox)
      MsgBox(mypb.Location.ToString)
    Catch ex As Exception

    End Try
  End Sub
Лучше день потерять — потом за пять минут долететь!

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Re: Обработка событий динамически созданных контролов

Сообщение GAGArin » 27.03.2010 (Сб) 22:44

По массиву думал бегать, чтобы определить положение контрола именно в массиве, но данных о расположении на форме действительно в большинстве задач хватает. Спасибо.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56

    TopList