Object.Attach (gb)

Static Sub Attach ( Object As Object, Parent As Object, Name As String )

Attach an object to its parent.

Name is the name used for searching event handlers in the Parent object.

Every event raised by the object will be managed by an event-handler located in its parent.

If the parent is a class, then the the event-handlers will be static methods of the class.

The following code:

hObject = NEW MyClass
Object.Attach(hObject, ME, "EventName")

is equivalent to:

hObject = NEW MyClass AS "EventName"

Examples

PUBLIC Process1 AS Process
...
Process1 = SHELL "find /" FOR READ
Object.Attach(Process1, ME, "Process1")
...

PUBLIC SUB Process1_Read()

   Message.Info("Got output from Process1!")
   ' and then read and do something with the output...

END

The next example will create 8 PictureBoxes and each time one of the picture boxes is clicked (MouseUp) then the on/off state in the Tag property and the Picture are toggled.

Here is demonstrated how an array of control elements can receive a signal, in this example the signal "MouseUp"

Private $picOn As Picture = Picture["icon:/32/connect"]
Private $picOff As Picture = Picture["icon:/32/disconnect"]

Public Sub Form_Show()
  Dim i As Integer
  Dim hSwitch As PictureBox

  ' Align all PictureBoxes neatly in a row
  Me.Arrangement = Arrange.Row
  ' Create 8 PictureBoxes
  For i = 1 To 8
    hSwitch = New PictureBox(Me)
    hSwitch.Resize(32, 32)
    ' The Tag indicates if the switch is on or off
    hSwitch.Tag = False
    hSwitch.Picture = $picOff
    ' Note: Instead of Object.Attach() you should assign the event name at object creation,
    ' i.e. hSwitch = New PictureBox(Me) As "Switch"
    Object.Attach(hSwitch, Me, "Switch")
  Next
End

Public Sub Switch_MouseUp()
  Dim hSwitch As PictureBox = Last ' get the box that raised the event (was clicked on)

  ' Flip switch and assign the appropriate picture
  hSwitch.Tag = Not hSwitch.Tag
  If hSwitch.Tag Then
    hSwitch.Picture = $picOn
  Else
    hSwitch.Picture = $picOff
  Endif
End