Frage

In meiner Anwendung muss ich die Taste des Hauptformulars minimieren vorübergehend ausgegraut. Irgendwelche Ideen, wie dies erreicht werden kann? Ich habe nichts dagegen tun p / ruft zu Win32-DLLs.

Edit: die Taste minimieren Vergrauung würde die bevorzugte Lösung sein, aber ist es eine andere Möglichkeit, die Form zu verhindern, minimiert immer

War es hilfreich?

Lösung

Ich lese dein Kommentar in Bezug auf meine Antwort und konnte eine Komplettlösung für Sie oben trommeln. Ich lief dies schnell und es schien, um das Verhalten zu haben, die Sie wollten. Statt Ihre WinForms von Form ableiten, ergeben sich aus dieser Klasse:


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

Sie könnte etwas tun, wenn Sie entscheiden, ob sie in der Lage sein wollte, zu der Zeit zu minimieren, damit wird der Klick gesendet, zum Beispiel:


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

Weitere Informationen zu diesem Fenster Meldung finden Sie in der MSDN-Artikel über sie .

Andere Tipps

form.MinimizeBox = false;

oder in Form Anwendungsbereich

MinimizeBox = false;

Just do MinimizeBox = false; in Code Ihre Form ist.

Setzen Sie diesen Code in Form des Resize-Ereignis:

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

Dies wird Ihre Form un-minimizable (HAFTUNGSAUSSCHLUSS: Ich bin nicht dafür das Standardverhalten von Fenstern in dieser Art und Weise zu verändern) machen

.

Sie können auch Handle auf das Minimieren-Ereignis implementieren den Befehl abzubrechen

Nicht. Verwirren Sie nicht mit meinem Fenster. Sie sind meine, nicht deine. Es ist mein Computer, und wenn ich minimieren will, sollte ich in der Lage sein. Ich kann nicht denken, und noch nie gegeben worden ist, einen guten Grund, dies zu tun.

Coincoin Antwort ist richtig. MinimizeBox ist auch als Eigenschaft im Designer-Eigenschaften-Fenster zur Verfügung.

@ Kevin: Während ich das Gefühl zu schätzen wissen, das ist nicht immer eine gültige Antwort. Wenn die Anwendung ein modales Dialogfeld anzeigt, indem eine neue Instanz eines Formulars erstellen und dann ruft .ShowDialog () auf sie, mögen Sie nicht den Benutzer diese Form zu minimieren, weil dann alle Eingaben auf dem Haupt-UI-Thread blockiert, bis diese Form modaler Status erfüllt ist. Der Benutzer könnte möglicherweise auf dem Hauptformular klicken und nur den „ding ding ding“ unempfänglich Sound unter Windows erhalten und nicht wissen, was zu tun ist.

nur die MinimizeBox Eigenschaft des Formulars auf false gesetzt. dies wird die Schaltfläche minimieren deaktivieren, aber andere Tasten funktionsfähig bleiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top