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.

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.
Muy bueno , tambien si tienes chance podrias explicar como se manejan los MDI Form
Salduso
los botones que muestras en la segunda ventana se puede asignar las teclas de movimiento?
esta interesante, pero que boton le corresponde al cuadro rojo ubicado en el from1, pq no funciona el ejemplo.