none
un formulario en dialog RRS feed

  • Pregunta

  • Hola a tod@s:
    Estoy probando a abrir un formulario en modo diálogo, formulario.shoswDialgo(); , pero lo que hace es mostrármelo a pantalla completa. He intentado poner un tamaño más pequeño, pero siempre lo abre a pantalla completa, no consigo abrirlo en modo diálogo. ¿Sabeis como se puede hacer esto? ¿Hay que cambiar alguna propiedad del formulario?

    Gracias desde ya!
    Un saludo
    jueves, 26 de abril de 2007 10:35

Respuestas

  • Hola francisco.
    Si quieres solo quitarle el borde pues solo dejale, para que paresca un dialogo sencillo sin boton de ok ni nada solo le quita el borde y sale!

    Code Snippet


    this.FormBorderStyle = FormBorderStyle.None
    this.Size = new Size(100,100);//el tamaño que quieres!


    pero si lo que quieres es que paresca un Dialogo de verdad con todos los jugetes ademas que de que quede flotante lo mas de bonito pues tengo unas lineas de codigo que pueden servir de ayuda!

    Code Snippet


    public static void MakeFlotableForm(Form formToFlotable)
            {
                formToFlotable.FormBorderStyle = FormBorderStyle.None;
                IntPtr hWnd = formToFlotable.Handle;
                int style = (int)(WS.BORDER | WS.CAPTION | WS.DLGFRAME);
                int lastStyle = Native.SetWindowLong(hWnd, (int)GWL.STYLE, style);
                Rectangle screen = Screen.PrimaryScreen.WorkingArea;
                int heightToolBar = 26;//26
                bool successWindowPos = Native.SetWindowPos(hWnd, 0, ((screen.Width - formToFlotable.Width) / 2), ((screen.Height - (formToFlotable.Height + heightToolBar)) / 2), formToFlotable.Width, formToFlotable.Height + heightToolBar, (int)SWP.NOACTIVATE);
            }


    Solo llama el metodo y juass con el formulario que quieres comvertir en flotante y listo tienes un formulario flotante lo mas de chusco!

    jeje con este si me gane el MVP....
    jajajajaja
    Ojala te sea de utilidad!
    miércoles, 6 de junio de 2007 22:34
  • Wow no me fije!
    Bien vale te cuento, es que estoy desarrollando un Core para manejar cositas que podrian ayudar el desarrollo para aplicaciones con el Compact Framework,

    Entonces te cuento,
    Los que tienen el prefijo Native son llamadas al Api de Windows
    WS es una enumeracion que contiene los stilos de las ventanas "Windows style"
    SWP son una Flags para la posiscion de la ventana SetWindowPos
    GWL es una constante para GetWindowLong

    De verdad Disculpas ya con esta parte del codigo que faltaba todo sale a la perfeccion!
    Y quizas cuando tenga mas perfeccionada mis librerias personales las comparta con ustedes!
    Un saludo!

    Code Snippet


    public class Native
     {

    [DllImport("Coredll.dll", SetLastError = true)]
            public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

    [DllImport("coredll.dll", SetLastError = true)]
            public static extern bool SetWindowPos(IntPtr hwnd, int hwnd2, int x, int y, int cx, int cy, int uFlags);

    }



    public enum WS
        {
            BORDER = 0x00800000,
            CAPTION = 0x00C00000,
            DLGFRAME = 0x00400000
           
        }



    public enum SWP
        {
            NOACTIVATE = 0x0010
        }


    public enum GWL
        {
            STYLE = -16
        }


    jueves, 7 de junio de 2007 13:56
  • Intenta de esta forma!
    Dentro del Evento Load del Formulario que quieres convertir en flotante!

    Code Snippet


    this.Size = new Size(100, 100);
    MakeFlotableForm(this);


    Eso funcionara de seguro!
    ¡eso espero!
    jueves, 7 de junio de 2007 14:59

Todas las respuestas

  • No he tenido tiempo para probarlo... pero creo que sería suficiente con:

    FormBorderStyle.None

     

    Un saludo!

    jueves, 26 de abril de 2007 10:56
  • Hola Toni:
    Pues te lo digo, he probado tu solución y nada, lo carga a pantalla completa, además no se puede mover por encima del otro formulario.

    ¿alguna idea mas?

    Gracias desde ya!
    Un saludo
    jueves, 26 de abril de 2007 11:22
  • ShowDialog no tiene nada que ver con pantalla completa. ¿Has comprobado que el formulario la propiedad Window State.

    Saludos

    viernes, 4 de mayo de 2007 19:04
  • Hola francisco.
    Si quieres solo quitarle el borde pues solo dejale, para que paresca un dialogo sencillo sin boton de ok ni nada solo le quita el borde y sale!

    Code Snippet


    this.FormBorderStyle = FormBorderStyle.None
    this.Size = new Size(100,100);//el tamaño que quieres!


    pero si lo que quieres es que paresca un Dialogo de verdad con todos los jugetes ademas que de que quede flotante lo mas de bonito pues tengo unas lineas de codigo que pueden servir de ayuda!

    Code Snippet


    public static void MakeFlotableForm(Form formToFlotable)
            {
                formToFlotable.FormBorderStyle = FormBorderStyle.None;
                IntPtr hWnd = formToFlotable.Handle;
                int style = (int)(WS.BORDER | WS.CAPTION | WS.DLGFRAME);
                int lastStyle = Native.SetWindowLong(hWnd, (int)GWL.STYLE, style);
                Rectangle screen = Screen.PrimaryScreen.WorkingArea;
                int heightToolBar = 26;//26
                bool successWindowPos = Native.SetWindowPos(hWnd, 0, ((screen.Width - formToFlotable.Width) / 2), ((screen.Height - (formToFlotable.Height + heightToolBar)) / 2), formToFlotable.Width, formToFlotable.Height + heightToolBar, (int)SWP.NOACTIVATE);
            }


    Solo llama el metodo y juass con el formulario que quieres comvertir en flotante y listo tienes un formulario flotante lo mas de chusco!

    jeje con este si me gane el MVP....
    jajajajaja
    Ojala te sea de utilidad!
    miércoles, 6 de junio de 2007 22:34
  • Hola Steve, lo he añadido a mi formulario que tiene que levitar Wink, y me salen unos errores, seguro que son nombres que tienes definidos por algún otro sitio. no?

    The name 'WS' does not exist in the current context
    The name 'Native' does not exist in the current context
    The name 'GWL' does not exist in the current context
    The name 'SWP' does not exist in the current context

    Me puedes decir de dónde vienen esos nombre?

    Muchas gracias desde ya!
    jueves, 7 de junio de 2007 11:05
  • Wow no me fije!
    Bien vale te cuento, es que estoy desarrollando un Core para manejar cositas que podrian ayudar el desarrollo para aplicaciones con el Compact Framework,

    Entonces te cuento,
    Los que tienen el prefijo Native son llamadas al Api de Windows
    WS es una enumeracion que contiene los stilos de las ventanas "Windows style"
    SWP son una Flags para la posiscion de la ventana SetWindowPos
    GWL es una constante para GetWindowLong

    De verdad Disculpas ya con esta parte del codigo que faltaba todo sale a la perfeccion!
    Y quizas cuando tenga mas perfeccionada mis librerias personales las comparta con ustedes!
    Un saludo!

    Code Snippet


    public class Native
     {

    [DllImport("Coredll.dll", SetLastError = true)]
            public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

    [DllImport("coredll.dll", SetLastError = true)]
            public static extern bool SetWindowPos(IntPtr hwnd, int hwnd2, int x, int y, int cx, int cy, int uFlags);

    }



    public enum WS
        {
            BORDER = 0x00800000,
            CAPTION = 0x00C00000,
            DLGFRAME = 0x00400000
           
        }



    public enum SWP
        {
            NOACTIVATE = 0x0010
        }


    public enum GWL
        {
            STYLE = -16
        }


    jueves, 7 de junio de 2007 13:56
  • No me va Steven:
    He creado una aplicación para verlo y tengo dos formularios, form1(main) y form2. En form1 he puesto un botón que hace lo siguiente:

    Code Snippet


    Form2 f2 = new Form2();
    MakeFlotableForm(f2);
    f2.ShowDialog();




    Lo he probado también con simplemente Show, y lo muestra a pantalla completa. No he modificado en nada los métodos que has posteado. ¿Se me pasa algo?

    Un saludo.
    Estoy deseando ver ese framewok Wink
    jueves, 7 de junio de 2007 14:39
  • Intenta de esta forma!
    Dentro del Evento Load del Formulario que quieres convertir en flotante!

    Code Snippet


    this.Size = new Size(100, 100);
    MakeFlotableForm(this);


    Eso funcionara de seguro!
    ¡eso espero!
    jueves, 7 de junio de 2007 14:59
  • Y con esto conseguimos un formulario flotante Smile

    La pega que le veo es que por defecto pone el formulario en el centro de la pantalla, ¿hay alguna forma de cambiar esa localización?, lo he intentado pero siempre lo pone en el centro.

    Muchas gracias Steven por tu ayuda.
    Seguimos en contacto. Tengo mucho que aprender de ti Maestro Wink

    Un saludo.
    viernes, 8 de junio de 2007 7:08
  • Hola Steven,
     
            He seguido al pie de la letra las instrucciones y tengo un problema:

            Al compilar, me dice:

            Error    1    'System.Windows.Forms.Form' no contiene una definición para 'Handle'   

            Me podrías decir qué está pasando, por favor ?

            Gracias y un saludo

    miércoles, 11 de julio de 2007 16:51
  • Hola GevisaTe cuento que la propiedad Handle si existe en la Clase Form, Gracias a que se la hereda a la clase Control

    Mira la documentacion
    http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx

    Tu problema radica en que estas usando una version del Compact Framework anterior a la 2.0, pero no hay problema, puedes  usar la siguiente funcion por medio de P/Invoke para poder obtener el Handle de  tu formulario

    Code Snippet


    [DllImport("coredll.dll", EntryPoint="FindWindow")]
    public static extern int FindWindow(string lpClassName, string lpWindowName);


    de esta manera podras obtener el IntPtr que necesitas!

    Cualquier pregunta no dudes en escribir!

    Un saludo!
    miércoles, 11 de julio de 2007 18:40
  • Hola Steven,

     

         Muchas gracias por tu rápida respuesta. Si especifico que el FindWindow tenga un tipo de retorno "public static extern int", me da error el compilador, pues está esperando un IntPtr y no un int. He probado de cambiar el tipo de retorno por "public static extern IntPtr", pero luego, el Hwnd que me devuelve es 0.

     

         Qué estoy haciendo mal ?

     

         Muchas gracias y un saludo.

    jueves, 12 de julio de 2007 11:29
  • muy buenas señores, con permiso. en mis aplicaciones me basta con poner el siguiente codigo para hacer la pantalla fullscreen.

     

     

    Code Snippet

    this.Menu = null;

    this.Text = string.Empty;

    this.Size = new Size(240,320);

    this.FormBorderStyle = FormBorderStyle.None;

    this.ControlBox = false;

    this.WindowState = FormWindowState.Maximized;

    this.BringToFront();

    this.Refresh();

     

     

    NOTA: No sirve si el so es Windows CE, sólo valido para Windows Mobile.

     

    Saludos

     

    viernes, 13 de julio de 2007 8:21
    Moderador