Relacionar Formularios Windows

Durante mucho tiempo tuve este problema, por eso ahora que se como resolverlo lo comparto con ustedes.

Si desde un formulario windows llamo a otro formulario windows ya sea con la propiedad .Show o con .ShowDialog hasta que no cierro el segundo formulario no tengo el control del formulario principal… a menos que estos dos formularios esten “relacionados”. Veamos un ejemplo muy simple como para comprender el concepto y la forma de resolverlo.

En la imagen se ve claramente un formulario principal con un botón “mover panel rojo” y un panel rojo. Al presionar el botón abro un segundo fomrulario con cuatro botones (arriba, abajo, izquierda y derecha). Al presionar cualquiera de estos botones la que hace es mover el panel rojo en el sentido indicado.

Formulariosconectados

veamos el código del Form1

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim vfrmForm2 As New Form2
        vfrmForm2.formulario1 = Me
        vfrmForm2.ShowDialog()
    End Sub
End Class

y el código del Form2

Public Class Form2

    Public formulario1 As Form1

    Private Sub btnArriba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArriba.Click
        formulario1.Panel1.Top = formulario1.Panel1.Top - 1
    End Sub

    Private Sub btnDerecha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDerecha.Click
        formulario1.Panel1.Left = formulario1.Panel1.Left + 1
    End Sub

    Private Sub btnAbajo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbajo.Click
        formulario1.Panel1.Top = formulario1.Panel1.Top + 1
    End Sub

    Private Sub btnIzquierda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIzquierda.Click
        formulario1.Panel1.Left = formulario1.Panel1.Left - 1
    End Sub
End Class

Como pueden apreciar no se necesita mucho código para “conectar” los formularios. Es más, solo necesitamos una linea extra en cada formulario. En el Form2 voy a destacar la siguiente declaración: Public formulario1 As Form1 y en el Form1 vfrmForm2.formulario1 = Me. Esto hace que el Form1 instanciado en memoria se vincule con formulario1 declarado en el Form2. A partir de aquí ya están relacionados y puedo trabajar con cualquier control del Form1, por ejemplo el panel1 simplemente llamandolo formulario1.panel1.

Espero que les sea de tanta utilidad con lo es para mi.



3 Responses to “Relacionar Formularios Windows”

  1. joseL dice:

    Muy bueno , tambien si tienes chance podrias explicar como se manejan los MDI Form

    Salduso

  2. romina dice:

    los botones que muestras en la segunda ventana se puede asignar las teclas de movimiento?

  3. leonel dice:

    esta interesante, pero que boton le corresponde al cuadro rojo ubicado en el from1, pq no funciona el ejemplo.

Comentar