Указатели на события или Callback

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

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

SV
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 15.05.2002 (Ср) 16:09
Откуда: Russia

Указатели на события или Callback

Сообщение SV » 24.07.2012 (Вт) 7:19

Низкий поклон великому сайту благодаря которому я стал программистом))
Всем форумчанам доброго времени суток.

Много лет не программировал на VB, и вот возрождая традиции столкнулся с проблемкой.



Имеем пользовательский контрол, внутри которого динамически на groupbox добавляются пользовательские контролы разных типов.
Задача передать вызов события родителям, причем чтобы событие работало для всех динамически добавленных на пользовательский контрол, контролов.
Сейчас же событие работает только для последнего добавленного контролла.

Понимаю что копать нужно в сторону AddressOf и Delegate но опыта работы с ними не было ибо работал на VB6 и знаком только с AddresOff, попытался сохранить ссылку на процедуру в контролле, но так как указателей нету то и как это сделать неясно.

Прощу помощи, заранее благодарен.

VB NET VS2008

Упрощенный код.

Код: Выделить всё
Public Class ucFiles

    Private m_list_element As XmlNodeList

    Dim m_height As Integer
    Dim m_Y As Integer = 6
    Dim m_Items As Integer = -1
    Dim m_Control As ucAction
    Dim m_StartYMargin As Integer = 14
    Dim m_MarginBottom As Integer = 2


    Dim WithEvents newControler As ucConteroller


    Private Sub AddFiles(ByRef xmlNodeEl As XmlNode)

                newControler = New ucConteroller(xmlNodeEl)
                Me.AddControl(newControler)

    End Sub


    Private Sub AddControl(ByRef control As System.Windows.Forms.Control)

        control.Visible = True

        m_height = control.Height + m_MarginBottom
        m_Items = m_Items + 1

        control.Location = New Point(6, m_height * m_Items + m_StartYMargin)

        Me.GroupFiles.Controls.Add(control)

    End Sub





// необходимо чтобы это событие было привязано ко всем добавленным динамически контроллам типа newControler

    Private Sub newControler_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles newControler.Resize

        MessageBox.Show("изменился размер  = " & sender.Height)

    End Sub

// и это тоже
    Private Sub newControler_FilesAddEvent(ByVal Height As Integer) Handles newControler.FilesAddEvent

        MessageBox.Show( "Событие добавления контролла" )

    End Sub


End Class

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.07.2012 (Вт) 7:42

Как-то так:
Код: Выделить всё
If TypeOf control Is ucConteroller
  Dim Ucc as ucConteroller = control
  AddHandler Ucc.Resize, AddressOf newControler_Resize
  AddHandler Ucc.FilesAddEvent, AddressOf newControler_FilesAddEvent
End If
WithEvents описание в таком случае не требуется.

SV
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 15.05.2002 (Ср) 16:09
Откуда: Russia

Re: Указатели на события или Callback

Сообщение SV » 24.07.2012 (Вт) 8:52

Супер!
Все работает как надо, Респект!
Тему можно закрывать.


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

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

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

    TopList  
cron