none
Cómo traer al frente un venta en tamaño normal, cuando se tiene una ventana maximizada abierta????

    Question

  • Saludos.

    Resulta que tengo el formulario A, este formulario tiene varios controles, entre ellos un panel llamado "pnlPadre".

    En este panel "Padre" cargo varios formularios al hacer click en los respectivos botones para cargarlos. Utilizando MDI.

    El problema es el siguiente.

    - Tengo en ese panel "Padre" abierto un formulario (el formulario hijo #1) en estado Maximizado. Cuando se abre este formulario (el formulario hijo #1) ya aparece maximizado y asi es como debo de manejarlo.

    - Me propongo a abrir un formulario q no aparece en tamaño maximizado (el formulario hijo #2), aparece en tamaño normal. Cuando lo abro aparece detrás del formulario hijo #1, el que está en estado maximizado desde que se abrio.

    Yo quiero poder conseguir que el formulario #2 no aparezca atras, si no que en frente del formulario #1. Tal y como sucede con windows, que si tenemos una ventana maximizada y abrimos otra que no está maximizada el problema anterior no ocurre.

    Les agradezco de antemano por su ayuda.

    Gracias

    Tuesday, October 11, 2011 10:30 PM

All replies

  • mmmmmmm..... es porque realmente la clase Form hereda de la clase Control y al insertar este a un panel aunque conserva la apariencia de formulario se comporta como un control más...

    así que para traerlo al frente tendras que hacer uso de las API's de windows SetWindowPos y SetFocus

    ejemplo:

    public static class NativeMethods
    {
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
            [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            public static extern IntPtr SetFocus(IntPtr hwnd);
    
            public static void SetWindowTop(IntPtr WindHandle)
            {
                SetWindowPos(WindHandle, IntPtr.Zero, 0, 0, 0, 0, 0 | 0x0002 | 0x0001);
                SetFocus(WindHandle);
            }
    }
    
    


    y en el boton o menu desde donde cargas el formulario seria

    Form2 newInstance = new Form2();
    newInstance.TopLevel = false;
    newInstance.Parent = panelMDI;
    newInstance.Show();
    NativeMethods.SetWindowTop(newInstance.Handle);
    
    

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    Wednesday, October 12, 2011 3:13 AM
  • Como bien decis, el formulario hereda de la clase Control, con lo cual tiene el método BringToFront. Habeis probado si este funciona tambien con los MDI?

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bringtofront.aspx

    En formularios flotantes normales si funciona, en tu caso quizas también.


    Vota mi respuesta si te ha sido útil. Gracias.
    • Proposed as answer by David Peláez Wednesday, October 12, 2011 3:55 PM
    Wednesday, October 12, 2011 9:55 AM
  • Como bien decis, el formulario hereda de la clase Control, con lo cual tiene el método BringToFront. Habeis probado si este funciona tambien con los MDI?

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bringtofront.aspx

    En formularios flotantes normales si funciona, en tu caso quizas también.


    Vota mi respuesta si te ha sido útil. Gracias.


    Hola David,

    si funciona sin problema usando BringToFront y Focus, pero por alguna razon que ya olvide yo estaba usando la API de windows, tengo un projecto donde estaba creando un PanelMDI y hay lo implemento con las API pero como lo descontinue por falta de tiempo ya olvide porque lo hice con las API, jejejeje....

    tendre que retomar el projectito porque me estoy viendo en la necesidad de implementar un "Custom MDI Panel"...

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    Wednesday, October 12, 2011 2:12 PM
  • David.

    El método BringToFront() no me funciona en este caso, yo lo habia estado probando.

    Disculpen por no responder antes pero eh estado sin conexión.

    Gracias. 

     

    Wednesday, October 12, 2011 6:00 PM
  • David.

    El método BringToFront() no me funciona en este caso, yo lo habia estado probando.

    Disculpen por no responder antes pero eh estado sin conexión.

    Gracias. 

     

    y probastes utilizando las API?

    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    Wednesday, October 12, 2011 6:01 PM
  • en caso de que no te funcione con las API, explicanos que tiene en particular el metodo que estas utilizando para estas dos formas no te funcionen.

    y si puedes agregar imagenes y codigo mucho mejor.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    Wednesday, October 12, 2011 6:03 PM