locked
Abrir Formulario dentro de un mdi RRS feed

  • Pregunta

  • Buenas tardes. lo siguiente que os comento ya lo postee, pero creo que no se me entendio. intentare explicarme mejor ya que no encuentro la solucion.

     

    en mi aplicacion al iniciar se me abre un form mdi y en su interior otro formen el cual trabajo con normalidad, en el form mdi tengo unos menus donde abro diferentes forms dentro del mdi de la siguiente manera.

    foreach (Form childForm in MdiChildren)
          {
            childForm.Close();
          }
          Salidas Bajas = new Salidas();
          Bajas.MdiParent = this;
          Bajas.Show();

    esto lo manejo bien, y sin ningun problema, como veis, cierro un form y abro el siguiente, todo normal. el problema viene cuando abro en mi aplicacion un form pero independiente, osea que no lo abre dentro del mdi.

    en este caso tendria abierto tres forms

    mdi

    form dentro del mdi

    form independiente,

    lo que quisiera hacer es poner un botón el el form independiente y que me pase unos valores que contienen en unos texbox, al form dentro del mdi, que contiene los mismos texbox.

    alguna idea, opinion?

    muchas gracias

    lunes, 28 de junio de 2010 14:58

Respuestas

  • hola

    si conoces la instancia del form mdi y creas una del form independiente

    podrias usar una tecnica como esto

    C# – Comunicar formularios MDI

    C# – Comunicar formularios de forma desacoplada

    como veras en una propiedad le pasa la instancia del form mdi que implemente una determianda interfaz, para luego desde el form independiente invocar la funcionalidad

    de esta form desacoplas los formulario y los ahces independiantes entre ellos, cualqueira que implemente la interfaz podras invocar a este form independiente y comunicarse

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 28 de junio de 2010 15:21
  • Tendrás que establecer la comunicación entre el formulario independiente y el formulario interno del MDI desde algún sitio donde ambos sean visibles. Típicamente, si abres ambos desde algún menú en el MDI, entonces es éste el que es capaz de verlos a ambos. En ese caso, desde el sitio donde se abre el formulario independiente, le pasarías una referencia al hijo del MDI para que el primero pueda "hablarse" con el segundo por mediación de dicha referencia. Por ejemplo:

    //Esto está en el menú que abre el formulario "independiente":
    Salidas hijo = this.MdiChildren[0]; //Referencia al hijo del MDI
    Form2 frmIndependiente = new Form2();
    Form2.ReferenciaAlMdi = hijo;
    Form2.Show();

    Por supuesto, el form externo tiene una propiedad pública para pasarle el dato mencionado. Otra posibilidad es que sea privada y se le pase a través del constructor.

    Una vez que tiene esa referencia, puede cambiar los valores del hijo MDI a través de ella:

    //Esto está en el Form2
    public Salidas ReferenciaAlMdi;
    //...
    ReferenciaAlMdi.TextBox1.Text = valor;

    Lógicamente, el TextBox1 del hijo Mdi tendrá que ser público para poder hacer lo anterior, o mejor todavía, puede exhibirse una propiedad pública en dicho formulario para pasarle los valores al textbox, en lugar de publicar el propio textbox.

     

    lunes, 28 de junio de 2010 15:32
    Moderador

Todas las respuestas

  • hola

    si conoces la instancia del form mdi y creas una del form independiente

    podrias usar una tecnica como esto

    C# – Comunicar formularios MDI

    C# – Comunicar formularios de forma desacoplada

    como veras en una propiedad le pasa la instancia del form mdi que implemente una determianda interfaz, para luego desde el form independiente invocar la funcionalidad

    de esta form desacoplas los formulario y los ahces independiantes entre ellos, cualqueira que implemente la interfaz podras invocar a este form independiente y comunicarse

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 28 de junio de 2010 15:21
  • Tendrás que establecer la comunicación entre el formulario independiente y el formulario interno del MDI desde algún sitio donde ambos sean visibles. Típicamente, si abres ambos desde algún menú en el MDI, entonces es éste el que es capaz de verlos a ambos. En ese caso, desde el sitio donde se abre el formulario independiente, le pasarías una referencia al hijo del MDI para que el primero pueda "hablarse" con el segundo por mediación de dicha referencia. Por ejemplo:

    //Esto está en el menú que abre el formulario "independiente":
    Salidas hijo = this.MdiChildren[0]; //Referencia al hijo del MDI
    Form2 frmIndependiente = new Form2();
    Form2.ReferenciaAlMdi = hijo;
    Form2.Show();

    Por supuesto, el form externo tiene una propiedad pública para pasarle el dato mencionado. Otra posibilidad es que sea privada y se le pase a través del constructor.

    Una vez que tiene esa referencia, puede cambiar los valores del hijo MDI a través de ella:

    //Esto está en el Form2
    public Salidas ReferenciaAlMdi;
    //...
    ReferenciaAlMdi.TextBox1.Text = valor;

    Lógicamente, el TextBox1 del hijo Mdi tendrá que ser público para poder hacer lo anterior, o mejor todavía, puede exhibirse una propiedad pública en dicho formulario para pasarle los valores al textbox, en lugar de publicar el propio textbox.

     

    lunes, 28 de junio de 2010 15:32
    Moderador