none
Intanciar a una interface desde un FORM MDI para pasar un dato a un FORM HIJO en ejecucion RRS feed

  • Pregunta

  • Hola a todos.

    Bueno tengo tres formularios FORM1 FORM3 y MDIParent1 al dar inicio MDIParent1 se ejecuta en conjunto con FORM1 en su interior, mientras que FORM3  es llamado desde un boton ubicado en el menu del formulario MDIParent1 desde este mismo capturo el cierre de FORM3 lo que con lleva a ejecutar una funcion que deberia pasarle una cadena de caracteres atraves de una interface a FORM1 pero tengo el problema que no logro hacer referencia desde MDIParent1 a mi interface este simpre retorna un null como resultado de la referencia que se realiza dejo una imagen por si no me deje entender estoy muy pregunton pero realmente no tengo a quien mas consultar sobre estos dilemas con c# porfavor una ayuda.En la linea de codigo despues del comentario siempre retorna un null.

    lunes, 30 de julio de 2018 22:26

Todas las respuestas

  • Ojo, no se puede "instanciar" una interface como dices en la pregunta. La interface siempre tuene que provenir de una clase que ya esté instanciada. Por suerte, según el código que has puesto, lo estás haciendo bien: "this.MdiParent as IActualiza1", devuelve la interfaz a partir de la instancia existente del MDI. Me imagino que ya has comprobado con el debugger que this.MDIParent no está devolviendo null (no debería si lo llamas desde un form que tenga bien asignado el MDIParent). Si efectivamente es así, es decir, el this.MdiParent no es null, entonces si this.MdiParent as IActualiza1 te devuelve null significa que el MDI no está implementando la interfaz IActualiza1. Convendría que nos pusieras cómo es la declaración del formulario MDI para verificar si tiene declarada dicha implementación.
    martes, 31 de julio de 2018 10:49
    Moderador
  • esta es mi clase interface:
    martes, 31 de julio de 2018 12:23
  • En Form1 quien recibira la cadena de caracteres de la interface
    martes, 31 de julio de 2018 12:25
  • Y por ultimo el MDI que realmente no se si se refereia a esta seccion la cual queria ver usted alberto.
    martes, 31 de julio de 2018 12:27
  • esta es la manera en la que llamo a mi FORM1 
    martes, 31 de julio de 2018 12:30
  • Esta es la parte fundamental: fíjate en donde declaras el MdiParent1, que únicamente hereda de Form, pero ahí no tienes metida la interfaz. En cambio, donde tienes la interfaz metida es en el Form1. Pero si vuelves al código donde recuperabas la interfaz:  "this.MdiParent as IActualiza1", fíjate que la estás llamando sobre el MdiParent (donde no está) en lugar de llamarla sobre el Form1 (donde sí está).

    Es más, detecto otro problema adicional: volviendo sobre la primera imagen que pusiste, observo que la llamada al this.MdiParent la tienes metida dentro del propio MdiParent1, con lo que estás llamando al Parent del Parent, que probablemente no funcionará dado que no se permite anidar un MDI dentro de otro MDI. Así que algo falla en la lógica que estás usando, tienes que reorganizar al programa para meter cada cosa en el sitio que le corresponde.

    martes, 31 de julio de 2018 13:48
    Moderador
  • Pucha y pensar que solo quiero mandar una cadena de caracteres no me imagino el lio que se me avecina cuando empiece con un AVM maestro detalle
    martes, 31 de julio de 2018 14:09