Question

Dans mon application, je dois griser temporairement le bouton de réduction du formulaire principal. Des idées comment cela peut être réalisé? Cela ne me dérange pas de faire p / invoque les dlls Win32.

Modifier: la solution à privilégier serait d’agrandir le bouton de réduction, mais existe-t-il un autre moyen d’empêcher que le formulaire ne soit minimisé?

Était-ce utile?

La solution

J'ai lu votre commentaire concernant ma réponse et j'ai pu vous proposer une solution plus complète. J'ai couru ça rapidement et il semblait avoir le comportement que tu voulais. Au lieu de dériver vos winforms de Form, dérivez de cette classe:


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;
        }
    }
}

Vous pourriez en faire un peu plus si vous voulez pouvoir décider d'autoriser ou non la réduction au moment de l'envoi du clic, par exemple:


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);
        }
    }
}

Pour plus d'informations sur cette notification de fenêtre, voir le Article MSDN à ce sujet .

Autres conseils

form.MinimizeBox = false;

ou si dans la portée du formulaire

MinimizeBox = false;

Il suffit de faire MinimizeBox = false; dans le code de votre formulaire.

Mettez ce code dans l'événement Resize de votre formulaire:

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

Cela rendra votre formulaire non-minimisable (AVERTISSEMENT: je ne préconise pas de modifier le comportement standard des fenêtres de cette façon).

Vous pouvez également implémenter le handle de l'événement Minimize pour annuler la commande

Ne pas. Ne plaisante pas avec mes fenêtres. Ils sont à moi, pas à vous. C'est mon ordinateur et si je veux minimiser, je devrais pouvoir le faire. Je ne peux pas penser et je n’ai jamais reçu une bonne raison de le faire.

La réponse de Coincoin est correcte. MinimizeBox est également disponible en tant que propriété dans la fenêtre des propriétés du concepteur.

@ Kevin: Bien que j'apprécie le sentiment, ce n'est pas toujours une réponse valable. Si l'application affiche une boîte de dialogue modale en créant une nouvelle instance d'un formulaire, puis en appelant .ShowDialog () dessus, vous ne souhaitez pas que l'utilisateur réduise ce formulaire, car toutes les entrées du thread principal de l'interface utilisateur sont bloquées jusqu'à ce que le statut modal de ce formulaire est satisfait. L’utilisateur peut éventuellement cliquer sur le formulaire principal et obtenir simplement le "ding ding ding". son insensible de Windows et ne sait pas quoi faire.

définissez simplement la propriété MinimizeBox de votre formulaire sur false. cela désactivera le bouton Réduire, mais les autres boutons resteront fonctionnels.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top