Pregunta

En mi aplicación, necesito atenuar temporalmente el botón de minimizar del formulario principal. ¿Alguna idea de cómo se puede lograr esto? No me importa hacer p / invocaciones a Win32 dlls.

Editar: atenuar el botón minimizar sería la solución preferida, pero ¿hay alguna otra forma de evitar que el formulario se minimice?

¿Fue útil?

Solución

Leí tu comentario con respecto a mi respuesta y pude encontrar una solución más completa para ti. Corrí esto rápidamente y parecía tener el comportamiento que querías. En lugar de derivar sus winforms de Form, deriva de esta clase:


using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace NoMinimizeTest
{
    public class MinimizeControlForm : Form
    {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MINIMIZE = 0xf020;

        protected MinimizeControlForm()
        {
            AllowMinimize = true;
        }

        protected override void WndProc(ref Message m)
        {
            if (!AllowMinimize)
            {
                if (m.Msg == WM_SYSCOMMAND)
                {
                    if (m.WParam.ToInt32() == SC_MINIMIZE)
                    {
                        m.Result = IntPtr.Zero;
                        return;
                    }
                }
            }
            base.WndProc(ref m);
        }

        [Browsable(true)]
        [Category("Behavior")]
        [Description("Specifies whether to allow the window to minimize when the minimize button and command are enabled.")]
        [DefaultValue(true)]
        public bool AllowMinimize
        {
            get;
            set;
        }
    }
}

Podría hacer un poco más si quisiera poder decidir si permitir la minimización en el momento en que se envía el clic, por ejemplo:


using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace NoMinimizeTest
{
    public class MinimizeControlForm : Form
    {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MINIMIZE = 0xf020;

        protected MinimizeControlForm()
        {

        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SYSCOMMAND)
            {
                if (m.WParam.ToInt32() == SC_MINIMIZE && !CheckMinimizingAllowed())
                {
                    m.Result = IntPtr.Zero;
                    return;
                }
            }
            base.WndProc(ref m);
        }

        private bool CheckMinimizingAllowed()
        {
            CancelEventArgs args = new CancelEventArgs(false);
            OnMinimizing(args);
            return !args.Cancel;
        }

        [Browsable(true)]
        [Category("Behavior")]
        [Description("Allows a listener to prevent a window from being minimized.")]
        public event CancelEventHandler Minimizing;

        protected virtual void OnMinimizing(CancelEventArgs e)
        {
            if (Minimizing != null)
                Minimizing(this, e);
        }
    }
}

Para obtener más información sobre esta notificación de ventana, consulte Artículo de MSDN al respecto .

Otros consejos

form.MinimizeBox = false;

o si está en el alcance del formulario

MinimizeBox = false;

Solo haz MinimizeBox = false; en el código de tu formulario.

Ponga este código en el evento de cambio de tamaño de su formulario:

if (this.WindowState == FormWindowState.Minimized)
{
    this.WindowState = FormWindowState.Normal;
}

Esto hará que su formulario no sea minimizable (DESCARGO DE RESPONSABILIDAD: no recomiendo alterar el comportamiento estándar de las ventanas de esta manera).

También puede implementar un identificador para el evento Minimizar para cancelar el comando

No lo hagas. No te metas con mis ventanas. Son míos, no tuyos. Es mi computadora y si quiero minimizar, debería poder hacerlo. No puedo pensar, y nunca me han dado, una buena razón para hacerlo.

La respuesta de Coincoin es correcta. MinimizeBox también está disponible como una propiedad en la ventana de propiedades del diseñador.

@Kevin: Si bien aprecio el sentimiento, esa no siempre es una respuesta válida. Si la aplicación muestra un cuadro de diálogo modal al crear una nueva instancia de un Formulario y luego llamar a .ShowDialog () en él, no desea que el usuario minimice ese Formulario, porque entonces toda la entrada en el subproceso principal de la interfaz de usuario se bloquea hasta el estado modal de ese formulario se cumple El usuario podría hacer clic en el formulario principal y simplemente obtener el "ding ding ding". no responde el sonido de Windows y no sabe qué hacer.

simplemente establezca la propiedad MinimizeBox de su formulario en falso. esto deshabilitará el botón minimizar pero otros botones seguirán siendo funcionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top