Buenas!.
En este ejemplo. Lo que traté fue de que algo que ocurre en un formulario se informe en otro.
En este caso son sprites/dibujos que rebotan por el área de un control DrawingArea y cuando
llega a uno de los bordes del control DrawingArea se crea un evento, independiente del objeto.
Cada uno crea los suyos. Los llamo rectángulos, pero son cuadrados.
Así en el FMain tengo:
Código:
Const NUMDECUADRADOS As Integer = 3
Const ANCHOVENTANA As Integer = 600
Const ALTOVENTANA As Integer = 600
Private figuras As Rectangulo[]
Private unrect As Rectangulo
Private unformulario As FormTestContenedores
Private obs As Observer
El número de cuadrados es definible, a más cuadrados, mas información en el formulario de seguimiento.
Cada uno de los objetos creados va a tener su observador.
Código:
For i As Integer = 0 To NUMDECUADRADOS - 1
unrect = New Rectangulo([Pizarra.W / 2, Pizarra.h / 2], [Rand(-5, 5), Rand(-5, 5)], pizarra, i)
figuras.Add(unrect)
obs = New Observer(figuras) As "Vigilo"
Next
El FMain se encarga de informar al formulario de seguimiento de lo que está ocurriendo.
En la clase rectángulo:
Código:
Event Izquierdo(mensaje As String, indice As Integer)
Event Derecho(mensaje As String, indice As Integer)
Event Superior(mensaje As String, indice As Integer)
Event Inferior(mensaje As String, indice As Integer)
Y el lanzador de eventos.
Código:
Public Sub Actualizar()
If Me.xy[0] < 0 Then
Raise Izquierdo("Rectángulo choca con borde izquierdo", Me.indice)
Me.acel[0] *= -1
Else If Me.xy[0] > Me.area.W - ANCHORECT Then
Raise Derecho("Renctángulo choca borde derecho", Me.indice)
Me.acel[0] *= -1
Endif
If Me.xy[1] > Me.area.H - ALTORECT Then
Raise Inferior("Rectángulo choca con borde inferior", Me.indice)
Me.acel[1] *= -1
Else If Me.xy[1] < 0 Then
Raise Superior("Rectángulo choca con borde superior", Me.indice)
Me.acel[1] *= -1
Endif
Me.xy[0] += Me.acel[0]
Me.xy[1] += Me.acel[1]
End
( Me estoy dando cuenta que sobra el observador que tiene la propia clase ). No es sencillo estos temas.
Nos vamos basando en ejemplos que hemos visto anteriormente.
Y en el formulario que se muestra el seguimiento de los objetos. Se encuentra el procedimiento:
MostrarMensaje(mensaje , indice)
En el formulario de monitorización se crean una serie de contenedores que se van repitiendo según
el número de sprites por el área de dibujo.
El número del tag del contenedor en el que se muestra el mensaje tiene su propiedad Tag igual a 1.
Por cada uno de los sprites se va mirando su estado y se muestra en el que contenedor que le corresponde.
Código:
Public Sub MostrarMensaje(mensaje As String, indice As Integer)
Dim ob As Object
For Each ob In paneles[indice].Children
If ob.tag = 1 Then
ob.text = mensaje
Break
Endif
Next
End
Es un tema a estudiar, el generar eventos personalizados y controlarlos.
Saludos