Visual Basic.NET - Llamadas entre instancias

   
Vista:

Llamadas entre instancias

Publicado por Jorge Navarro Sanchidrián (3 intervenciones) el 22/03/2014 10:49:21
Buenas a todos.

Antes de nada pediros disculpas por si el tema es recurrente pero, además de no estar muy ducho, soy bastante malo buscando y, para no ser raro en mí, llevo varios intentos sin éxito.

Os explico.
Tengo un form en el que tengo definido una sub pública. Éste es abierto como una nueva instancia dentro de un proyecto. A su vez, desde este form, se llama a otro. Todo esto dentro de un formulario mdi y ambos como hijos de éste.

El problema surge que cuando quiero llamar a la sub pública del primer formulario desde el segundo, abierto como una instancia desde el primero, me es imposible ya que la variable definida como form en el formulario de llamada no me lo permite.

Os pongo el ejemplo:

*********************************************************************************
Public Class frmInicial
Private Sub Form_Accion)
Me.Visible = False
Dim frm As New frmDestino
frm.MdiParent = MDIFondo
frm.fmOri = Me
frm.Show()
End Sub

Public Sub Form_Activar()
messagebox.show "Al fin veo esta línea"
end sub
end class

Public Class frmDestino
Public fmOri As Form = Nothing
Private Sub Form_Accion()
fmOri.Form_Activar() 'En esta línea me da el error
fmOri.visible = true
me.close()
End Sub
end class

*********************************************************************************

El primer error que me encontré fue uno que me dió en la escritura del proceso. Lo solucioné poniendo el procedimiento SUB de frmInicial Form_Activar como Friend, aunque, sinceramente, sin saber mucho lo que estaba haciendo.

Ahora cuando intente hacer referencia o llamar a cualquier miembro de la clase frmInicial através de la instancia fmOri me es imposible, porque de entrada, a la hora de escribir, ya me ocasiona un error indicándome como que no reconoce los objetos, aunque, hacerlo visible, y otras operaciones sí puedo.

Gracias a todos. Disculpar el rollo y si necesitáis algo más aquí estoy para aclararos todo.

A ver si puedo arreglarlo.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Llamadas entre instancias

Publicado por Cristian (10 intervenciones) el 25/03/2014 14:58:37
Quieres enviar datos de un frm a otro ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamadas entre instancias

Publicado por Jorge Navarro Sanchidrián (3 intervenciones) el 26/03/2014 09:06:09
Hola.

Mi intención es refrescar la ventana de origen, aunque se puedan llevar a cabo otras operativas por necesidad.

A grandes rasgos: Supón que entramos en un mantenimiento de una tabla que está vacía. Las opciones de modificación, baja, búsqueda, impresión estarán deshabilitadas, al igual que la lista donde luego van a aparecer la relación de registros que tenga la tabla. Al hacer clic en Nuevo, la aplicación me lleva a un formulario de entrada donde registro los datos del nuevo registro. Al aceptarlos, además de grabar, tendré que actualizar la lista del formulario origen y habilitar todas las opciones que deben estar en ese estado por contener un registro.

Siguiendo con el ejemplo anterior, Form_Activar es una sub que en VB6 yo declaraba como pública y que es donde se realizan las operaciones de habilitar, deshabilitar, cambiar colores de fondo a las cajas, etc, etc. Esta función era llamada cuando la situación de la tabla que mantiene cambia y lo puede hacer tanto desde su mismo formulario como desde otros.

Normalmente, los formularios como este, les abría (VB6) como instancias nuevas (dim frm as form // set frm as new frmMantenimiento // load frm // set frm.fmOri = me). Posteriormente, la relación entre el formulario que llama (mantenimiento) y el llamado (edición) era al declarar una variable publica 'as form' (normalmente la llamaba fmOri) en el llamado y de esa manera podía hacer esa labor (aunque está escrito en vb.NET, te puedes hacer una idea con el ejemplo inicial). Para invocar a la función Form_Activar del formulario del Mantenimiento desde el de edición, tan solo tenía que poner fmOri.Form_Activar.

Espero haber aclarado algo. Tengo la sensación que me he ido complicando en las explicaciones.

Gracias por tu interés.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Llamadas entre instancias

Publicado por Jorge (6 intervenciones) el 26/03/2014 15:53:29
Te cuento como hago yo esto.

Como ejemplo un formulario de compra de libros. Desde el que a una persona le vamos añadiendo en una lista los libros que quiere comprar, se hace clic en un botón que llama a otro formulario donde buscar el libro y seleccionarlo.

Tengo esta variable global y pública
Public FRM_PARAMETRO_TRASPASO As String

Cuando desde el formulario tengo que llamar al secundario lo hago así:

Dim FSELLIBRO As New SELLIBRO 'defino el formulario de la selección del libro
FRM_PARAMETRO_TRASPASO = "" 'LIMPIO LA VARIABLE PARA EL TRASPASO DE INFORMACIÓN.
FSELLIBRO.Owner = Me ‘le indico que su Owner es la ficha de la entrada
FSELLIBRO.Show() 'llamo a la selección del libro

Desde el formulario secundario a la hora de seleccionar el libro pongo este código.

FRM_PARAMETRO_TRASPASO = codigo_libro 'establezco lo seleccionado en la variable global
DirectCast(MyBase.Owner, FENTRADA).ACTUALIZAR()'llamo a la función del formulario Owner (como el dependiente), que actualiza el libro seleccionada en la ficha. FENTRADA es el formulario que realizó la llamada al formulario secundario

Espero que te sirva de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamadas entre instancias

Publicado por Cristian (10 intervenciones) el 26/03/2014 16:37:56
Creo entender lo que me dices mira yo creo que al activar la ventana 2 deberías no cerrar la 1 sino que dejarla en ventana1.visible=false y esto significa que puedes usar todas sus propiedades y no cada vez que quieras guardar o ver los cambios volver a activarla .

En el botón guardar vuelves a dar propiedades que necesites a los botones o llamar a una función que podría estar en el el frm origen , por ultimo cuando el usuario quiera volver dejas ventana1.visible=true

Creo que no es complicado lo que quieres .

pd: avísame si no es lo que necesitas ya que es lo que entendí

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar