Lo puedes hacer de diferentes formas. Si lo que quieres hacer es que se pasen los datos y puedas cerrar el formulario origen (donde tenías los datos inicialmente), lo que puedes hacer es en lugar de pasar el formulario por referencia, pasarlo por copia. O simplemente pasar los datos que necesites. Se puede plantear de múltiples formas.
Por ejemplo, en el caso que pasemos el formulario completo por copia, lo haríamos así.
Tenemos dos formularios, el formulario inicial, el que tiene los datos, lo llamaremos
oFormularioOrigen del tipo
FormularioOrigen y el formulario que los va a recibir lo llamaremos
oFormularioDestino de la clase
FormularioDestino.
En el formulario destino tendrías que crear un método público, lo llamaremos por ejemplo RecibirDatos() y tendrá la siguiente definición:
Public Sub RecibirDatos(ByVal oForm as FormularioOrigen)
Ahora, cuando quieras pasarle los datos, desde el formulario origen harías
Dim oFormularioDestino as New FormularioDestino
oFormularioDestino.RecibirDatos(Me)
Y con eso le estás pasando al formulario destino una copia del formulario origen que lo está llamando, así, aunque destruyas el formulario origen, en el formulario destino seguirás teniendo una copia del formulario origen con todos sus datos en las cajas de texto.
Lo que tienes que tener en cuenta es que las cajas de texto del formulario origen que van a tener los datos tengan la propiedad
Modifiers con el valor "
Public" para que así puedas acceder as ellas desde el formulario destino.
Esta forma no es más una de las formas en la que lo puedes hacer, no es necesariamente la mejor ni la más óptima, ya que depende de lo que se necesite hacer. Este mismo planteamiento lo podrías hacer pasando en lugar de todo el formulario sólo los valores de los campos de datos (en Strings), que sería más rápido y seguro que pasar todo el formulario.
Igualmente lo puedes hacer mediante variables globales como ya has comentado (aunque no me parece muy recomendable porque rompes un poco la encapsulación).
También podrías hacer que en lugar de tener un método que recibe datos en el formulario destino tuvieras un método en el formulario origen que los devolviera cuando se le pidieran (aunque esto te obligaría a no destruir el formulario origen hasta que no hayas leído los datos).
Etc. Como ves se puede plantear de diferentes formas. Espero no haberte liado más.
Saludos