none
Problemas con un formulario hijo en una aplicación MDI RRS feed

  • Pregunta

  • Buenas,

    Os voy a exporner un problemilla que me estoy encontrando a ver si entre todos detectamos el "error".

    El caso es que estoy desarrollando una aplicación MDI. Dicha aplicación tiene un formulario principal llamado FAC_Principal, que tiene la propiedad IsMdiContainer = true.

    Hay otro formulario llamado FAC_Factura que quiero usar como formulario hijo desde el principal. Lo he implementado con el patrón singleton, ya que solo quiero tener una instancia del formulario hijo.


    El código de formulario hijo es el siguiente:

    Formulario: FAC_Factura

    public partial class FAC_Factura : Form
        {

            private string Modo;
            private int FacturaId;
            private static FAC_Factura _FAC_Factura = null;

            private FAC_Factura(string Modo, int FacturaId)
            {
                InitializeComponent();
                this.Modo = Modo;
                this.FacturaId = FacturaId;
            }

            public static FAC_Factura getInstance(string Modo, int FacturaId)
            {
                if ((_FAC_Factura == null) || _FAC_Factura.IsDisposed) //Verificamos si no ha sido creado
                {
                    _FAC_Factura = new FAC_Factura(Modo, FacturaId);
                }
                _FAC_Factura.BringToFront();
                return _FAC_Factura; //Regresamos la instancia unica del objeto
            }
        }



    Desde el formulario padre quiero mostrar el formulario hijo al pulsar un botón. El código que uso es el siguiente:

    Código del evento click del botón

    private void BtnNuevo_Click(object sender, EventArgs e)
            {
                FAC_Factura frmFactura = FAC_Factura.getInstance("ALTA", 1);
                frmFactura.MdiParent = this;
                frmFactura.Show();
            }


    Como podeis ver, primero obtengo la instancia, asocio el formulario principal como padre y lo muestro.

    Ahora viene lo cachondo: tal como está el código que muestro, la instancia se crea, puesto que he hecho pruebas para mostrar el número de formularios hijos del formulario FAC_Principal tras pulsar el botón, y me sale que hay un formulario hijo.

    Sin embargo el formulario hijo no se muestra.

    Si comento la línea en el que asocio la instancia del formulario hijo al forumario padre (
    //frmFactura.MdiParent = this;), el formulario se muestra correctamente.

    He revisado todo 100 veces y no veo or ningún lado que se me esta escapando.

    ¿Alguna idea?

    Gracias por adelantado

    viernes, 1 de junio de 2007 14:43

Todas las respuestas

  • Saludos,

    cambia la linea de codigo frmFactura.MdiParent = this;

    a el metodo singleto que crea la intancia

     

    para que quede asi

      public static FAC_Factura getInstance(string Modo, int FacturaId)
            {
                if ((_FAC_Factura == null) || _FAC_Factura.IsDisposed) //Verificamos si no ha sido creado
                {
                    _FAC_Factura = new FAC_Factura(Modo, FacturaId);

     _FAC_Factura.MdiParent = this;
                }
                _FAC_Factura.BringToFront();
                return _FAC_Factura; //Regresamos la instancia unica del objeto
            }


    Live like you'll die tomorrow, learn like you'll live forever. Blog
    • Propuesto como respuesta Gregory Pilar martes, 29 de marzo de 2011 23:40
    martes, 29 de marzo de 2011 23:40