none
Restaurar formulario minimizado RRS feed

  • Pregunta

  • Hola, como andan?

    Mi duda es simple,pero antes aclaro que al formulario le di la propiedad FormBorderStyle = None
    Y le añadi dos botones , uno para cerrarlo y otro para enviarlo a la barra de tareas.

    El codigo que se me ocurrio para enviarlo a la barra de tareas, es el siguiente

    private void MinimizarForm(object sender, EventArgs e)    
    {            
    this.WindowState = FormWindowState.Minimized; // no se si no existe una mejor forma para hacerlo.
    }

    Se oculta perfecto, el problema es que no se como levantarlo desde el icono en la barra de tareas!

    Que solucion existe para esto?, estube buscando y no encontre nada relacionado..

    Mas precisamente...
    Como se llama el evento que se ejecuta al pulsar el icono?

    Muchas gracias!


    • Editado LcsGrz miércoles, 3 de enero de 2018 4:30 Añadi mas datos
    miércoles, 3 de enero de 2018 4:28

Respuestas

  • Buenos días, 

    El problema que tienes es que al minimizar un formulario sin borde t sin los botones maximizar y minimizar y cerrar estándar no se puede maximizar.

    Bien aclarado el porqué ocurre. Lo único que se me ocurre es lo siguiente y tampoco puedo garantizar que funcione:

    - Al pulsar minimizar el formulario en tu botón antes de minimizar ponle la propiedad BorderStyle = a algún valor  diferente de none que permita que lo restaures desde la barra de tareas.

    - Al canviar el estado de maximizado, minimizado o restaurado (Y NO SE SI EXISTE EL EVENTO) o quizás al cambiiar de tamaño (EN EL EVENTO) pon la condición:this.WindowState !=FormWindowState.Minimized  (diferente de minimizado) entonces pon el form sin el borde otra vez.

    Saludos.

    miércoles, 3 de enero de 2018 13:05
  • hola

    >>Se oculta perfecto, el problema es que no se como levantarlo desde el icono en la barra de tareas

    para esto necesitas implementar el NotifyIcon

     How to Show NotifyIcon in Windows Forms Application Using C#

     Notify Icon in C#

    con este pondras el icono de la aplicacion al costado del reloj de la barra de tarea de windows

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de enero de 2018 12:49
  • Veo vario problemas en lo que intentas, por ejemplo que al minimizar el form no establezcas la opacity a 1 ya que al maximizar(desde la barra de tareas) valdrá 0 y no se verá.

    Otra cosa rara es la verificación que haces del timer al inicio si no esta enabled lo llamas de nuevo con lo que podría haber problemas.

    Otra cosa si disparas el timer en el sizechange y luego en el timer provocas un cambio de tamaño creas concurrencia en los eventos.

    No digo que sea la culpa de lo que pasa, pero creo que hay muchas posibilidades de que haya comportamientos no esperados por todo lo que te he comentado.

    Te escribo un poco de pseudo código de como lo haría yom sin timers.

    en el evento sizechanged:

    si estoy normal

           bucle for  para hacerme visible de 0 a 1 en intervalos 0.3 (con thread.Sleep(300))

    sino // estoy minimiazado

           bucle for para hacerme invisile de 1 a 0 en intervalors de 0.3 (con thread.Sleep(300))

    Ahora en el boton minimizar pones el el windowstate = minimize

    Ahora el el boton maximizar pones el windowstate = maximize

    En este punto te toca a ti decidir si hay que hacer transparencia o no al pasar de normal a maximizado o al reves, por que si es que no deberás controlar el estado anterior para evitar cambiar la opacidad en esos casos.

    Saludos.

    jueves, 4 de enero de 2018 0:35
  • hola

    estas seguro que se ejecuta el MinimizarForm() ? si pones un breakpoint pasa por alli la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de enero de 2018 21:09

Todas las respuestas

  • hola

    >>Se oculta perfecto, el problema es que no se como levantarlo desde el icono en la barra de tareas

    para esto necesitas implementar el NotifyIcon

     How to Show NotifyIcon in Windows Forms Application Using C#

     Notify Icon in C#

    con este pondras el icono de la aplicacion al costado del reloj de la barra de tarea de windows

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de enero de 2018 12:49
  • Buenos días, 

    El problema que tienes es que al minimizar un formulario sin borde t sin los botones maximizar y minimizar y cerrar estándar no se puede maximizar.

    Bien aclarado el porqué ocurre. Lo único que se me ocurre es lo siguiente y tampoco puedo garantizar que funcione:

    - Al pulsar minimizar el formulario en tu botón antes de minimizar ponle la propiedad BorderStyle = a algún valor  diferente de none que permita que lo restaures desde la barra de tareas.

    - Al canviar el estado de maximizado, minimizado o restaurado (Y NO SE SI EXISTE EL EVENTO) o quizás al cambiiar de tamaño (EN EL EVENTO) pon la condición:this.WindowState !=FormWindowState.Minimized  (diferente de minimizado) entonces pon el form sin el borde otra vez.

    Saludos.

    miércoles, 3 de enero de 2018 13:05
  • Muchas gracias a los 2 por responder, me di cuenta que fue un super error mio, en el que estaba probando el tema de la opasidad del form y en el evento SizeChanged le asignaba la opacidad a 0.. Disculpen, fui un tonto...

    Pero volviendo al mismo tema, me di cuenta que puedo minimizar desde mis propios botones, pero no tocando el icono en la barra de tareas,no se si me explico bien...

    Por ejemplo, ustedes estan usando el navegador para visualizar esta pagina, si quieren minimizarlo simplemente tocan en el boton _ y lo minimizan, o tambien pueden tocar en el icono que se encuentra en la barra de tareas y funciona exactamente igual.

    Bueno en mi caso, no hace nada..

    miércoles, 3 de enero de 2018 21:00
  • hola

    estas seguro que se ejecuta el MinimizarForm() ? si pones un breakpoint pasa por alli la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de enero de 2018 21:09
  • hola

    estas seguro que se ejecuta el MinimizarForm() ? si pones un breakpoint pasa por alli la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Si, segurisimo, observa (antes de esto se ejecuto la linea this.WindowState = FormWindowState.Minimized;)

    El timer me ayuda con el tema de la transparencia, le estaba  dando un efecto de FADE IN/OUT al form..
    Y mi error era que cuando estaba testeando, nunca iniciaba el timer, si no que tocaba la trasnparencia directamente de ahi para testear...
    Asi que podriamos decir que solucione el error que tenia.
    //Agrego una foto de mi timer para el FADE, quizas a alguien mas le puede servir..

    //Creeria que la primera linea se puede descartar

    El tema es el otro, no se si abrir otro hilo para preguntar sobre eso, o sigo en este.
    Como dije, solo puedo minimizar desde mi propio boton de minimizar, que ejecuta la linea que mostre arriba en NEGRITA, pero tambien me gustaria poder hacerlo desde el icono de la aplicacion que se encuentra en la barra de tareas.


    • Editado LcsGrz miércoles, 3 de enero de 2018 22:58 agrege mas info
    miércoles, 3 de enero de 2018 22:45

  • Te cuento, el problema es el siguiente, si tienes las propiedades de :

    MazimizeBox o MinimizeBox a false entonces no podrás actuar desde la barra de tareas. 

    Las has puesto a false para ocultar los botones de la barra de titulo. Lo que deberías hacer es ponerlas a true. I para ocultar los botones pon el controlBox del form a false. Así te funcionará todo bien.

    miércoles, 3 de enero de 2018 23:05

  • Te cuento, el problema es el siguiente, si tienes las propiedades de :

    MazimizeBox o MinimizeBox a false entonces no podrás actuar desde la barra de tareas. 

    Las has puesto a false para ocultar los botones de la barra de titulo. Lo que deberías hacer es ponerlas a true. I para ocultar los botones pon el controlBox del form a false. Así te funcionará todo bien.

    Para ocultar la barra del titulo solamente le di la propiedad FormBorderStyle = None , y nada mas ,las otras dos que mencionaste estan en true :c

    Ah porcierto, no funciona minimizar/maximizar desde el icono de la barra de tareas cuando el FORM esta abierto, si lo minimize antes, si funciona

    • Editado LcsGrz miércoles, 3 de enero de 2018 23:53 edite info
    miércoles, 3 de enero de 2018 23:52
  • Veo vario problemas en lo que intentas, por ejemplo que al minimizar el form no establezcas la opacity a 1 ya que al maximizar(desde la barra de tareas) valdrá 0 y no se verá.

    Otra cosa rara es la verificación que haces del timer al inicio si no esta enabled lo llamas de nuevo con lo que podría haber problemas.

    Otra cosa si disparas el timer en el sizechange y luego en el timer provocas un cambio de tamaño creas concurrencia en los eventos.

    No digo que sea la culpa de lo que pasa, pero creo que hay muchas posibilidades de que haya comportamientos no esperados por todo lo que te he comentado.

    Te escribo un poco de pseudo código de como lo haría yom sin timers.

    en el evento sizechanged:

    si estoy normal

           bucle for  para hacerme visible de 0 a 1 en intervalos 0.3 (con thread.Sleep(300))

    sino // estoy minimiazado

           bucle for para hacerme invisile de 1 a 0 en intervalors de 0.3 (con thread.Sleep(300))

    Ahora en el boton minimizar pones el el windowstate = minimize

    Ahora el el boton maximizar pones el windowstate = maximize

    En este punto te toca a ti decidir si hay que hacer transparencia o no al pasar de normal a maximizado o al reves, por que si es que no deberás controlar el estado anterior para evitar cambiar la opacidad en esos casos.

    Saludos.

    jueves, 4 de enero de 2018 0:35