2008-11-25 9 views
6

In meiner Anwendung muss ich den Minimieren-Button des Hauptformulars vorübergehend ausgrauen. Irgendwelche Ideen, wie dies erreicht werden kann? Es macht mir nichts aus p/ruft Win32 dlls.Wie Sie die Schaltfläche zum Minimieren in C# deaktivieren?

Bearbeiten: Das Minimieren der Minimieren-Schaltfläche wäre die bevorzugte Lösung, aber gibt es eine andere Möglichkeit zu verhindern, dass das Formular minimiert wird?

Antwort

11

Ich habe Ihren Kommentar in Bezug auf meine Antwort gelesen und konnte eine umfassendere Lösung für Sie erstellen. Ich lief das schnell und es schien das Verhalten zu haben, das du wolltest. 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önnten ein bisschen mehr tun, wenn Sie in der Lage sein wollte, zu entscheiden, ob zu der Zeit zu minimieren, damit der Klick gesendet wird, 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 dieser Fensterbenachrichtigung finden Sie unter MSDN article about it.

10
form.MinimizeBox = false; 

oder in Form Umfang

MinimizeBox = false; 
+0

Damit wird die Minimierungsbox ausgeblendet, aber nicht ausgegraut. –

+1

Hmmm, komisch. Ich habe es getestet und es macht es grau. Es ist immer noch da, halbtransparent und du kannst es nicht anklicken. – Coincoin

+2

Hängt von Ihrem Windows-Thema ab. Wenn die Minimieren-Schaltfläche aktiviert ist, erhalten Sie ein Bild. Wenn deaktiviert, erhalten Sie ein anderes Bild. Dieses Bild könnte nichts sein, also siehst du nicht einmal einen ausgegrauten Knopf. – Eyal

1

Just do MinimizeBox = false; in Ihrem Formularcode.

0

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

+0

Das würde funktionieren, wenn es ein solches Ereignis gäbe. :) – MusiGenesis

1

diesen Code Setzen Sie die in Ihrem Formular Resize Veranstaltung abzusagen:

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

Dies wird Ihre Form un-minimizable (HAFTUNGSAUSSCHLUSS machen: Ich mache nicht befürworten, das Standardverhalten von Fenstern auf diese Weise zu ändern).

0

Nicht. Leg dich nicht mit meinen Fenstern an. Sie gehören mir, nicht dir. Es ist mein Computer und wenn ich minimieren möchte, sollte ich in der Lage sein. Ich kann mir keinen guten Grund dafür vorstellen und wurde auch nie dafür gegeben.

+7

Ich werde mit "Kern Kern Kernüberwachung Software" gehen.Wenn der Autor dieses Fenster unminimalisierbar machen will, geht es mir gut. – MusiGenesis

+4

bis die Überwachungssoftware alles anzeigt und die Schaltfläche "Notabschaltung" sich hinter dem Fenster der Überwachungssoftware befindet – Kevin

+8

Um Himmels Willen, verwenden Sie C# WinForms nicht für Kernkraftwerke! –

0

Coincoins Antwort ist korrekt. MinimizeBox ist auch als Eigenschaft im Designer-Eigenschaftenfenster verfügbar.

@Kevin: Während ich die Stimmung zu schätzen weiß, ist das nicht immer eine gültige Antwort. Wenn die Anwendung ein modales Dialogfeld anzeigt, indem Sie eine neue Instanz eines Formulars erstellen und anschließend .ShowDialog() aufrufen, möchten Sie nicht, dass der Benutzer dieses Formular minimiert, da dann alle Eingaben im Hauptthread der Benutzeroberfläche blockiert werden Der modale Status dieses Formulars ist erfüllt. Der Benutzer könnte möglicherweise auf das Hauptformular klicken und nur den "ding ding ding" nicht reagierenden Sound von Windows bekommen und nicht wissen, was zu tun ist.

+0

Das Setzen von MinimizeBox auf false würde normalerweise ausreichen, aber in meinem Fall ist die MaximizeBox ebenfalls ausgeblendet. Wenn MinimizeBox angezeigt wird, rendert die Symbolleiste 3 Schaltflächen - minimieren, ausgegraut maximieren, schließen. Wenn aber MinimizeBox auf false gesetzt ist, werden die Schaltflächen zum Minimieren/Maximieren nicht mehr gerendert. –

+0

oder sie könnten eine Information hinter dem modalen Formular sehen müssen, um es auszufüllen und es zu minimieren, um diese Information besser zu sehen. Da diese Frage auch von Neuling-Programmierern eingesehen werden kann, wollte ich diesen Rat für sie veröffentlichen. – Kevin

0

Setzen Sie die MinimizeBox-Eigenschaft Ihres Formulars einfach auf false. Dies wird die Minimieren-Schaltfläche deaktivieren, aber andere Schaltflächen bleiben funktionsfähig.

Verwandte Themen